App.config: ขอบเขตผู้ใช้เทียบกับแอปพลิเคชัน


92

ฉันได้เพิ่มไฟล์ App.config ในโปรเจ็กต์ของฉันแล้ว ฉันได้สร้างการตั้งค่าสองอย่างจากโครงการ> คุณสมบัติ> แผงการตั้งค่า -

ใส่คำอธิบายภาพที่นี่

ฉันได้สังเกตเห็นว่าเมื่อผมเพิ่มการตั้งค่าให้ฉันสามารถกำหนดขอบเขตเป็นหรือUser Application-

  1. ผู้ใช้
  2. ใบสมัคร

ถ้าฉันกำหนดการตั้งค่าเมื่อUserไปที่userSettingsส่วน
ถ้าฉันกำหนดการตั้งค่าตามที่Applicationไปที่applicationSettingsส่วน

App.config

<configuration>

    <userSettings>
        <DemoApp.Properties.Settings>
            <setting name="MySetting1" serializeAs="String">
                <value>Value1</value>
            </setting>
        </DemoApp.Properties.Settings>
    </userSettings>

    <applicationSettings>
        <DemoApp.Properties.Settings>
            <setting name="MySetting2" serializeAs="String">
                <value>Value2</value>
            </setting>
        </DemoApp.Properties.Settings>
    </applicationSettings>

</configuration>

แต่การตั้งค่าเหล่านี้สามารถเข้าถึงได้ด้วยวิธีเดียวกันจาก.cs-

รหัส

string mySetting1 = DemoApp.Properties.Settings.Default.MySetting1;
string mySetting2 = DemoApp.Properties.Settings.Default.MySetting2;

อะไรคือความแตกต่างระหว่างUserและApplicationขอบเขตและภายใต้สถานการณ์ใดที่เราควรเลือกระหว่างสองสิ่งนี้?

คำตอบ:


73

โดยทั่วไปจะไม่สามารถเปลี่ยนแปลงการตั้งค่าแอปพลิเคชันระหว่างการทำงานของโปรแกรมและการตั้งค่าผู้ใช้สามารถทำได้ จากนั้นควรบันทึกการตั้งค่าผู้ใช้เหล่านี้เพื่อให้ผู้ใช้ได้รับประสบการณ์ที่คุ้นเคยเมื่อเรียกใช้แอปพลิเคชันต่อไป

แก้ไข: ตัวอย่างเช่นคุณอาจเขียนแอปพลิเคชันของคุณด้วยโมดูลที่แตกต่างกันและจำเป็นต้องตรวจสอบให้แน่ใจว่าโมดูลหลักของคุณใช้โมดูลความปลอดภัยในเวอร์ชันที่ถูกต้อง สำหรับสิ่งนี้คุณจะต้องตั้งค่าขอบเขตแอปพลิเคชันเช่น:

SecurityModuleVersion  string     Application      v1.21

ในภายหลังเมื่อคุณ refactor โมดูลความปลอดภัยคุณอาจเปลี่ยนค่าเป็น v1.22 เมื่อคุณปรับใช้เพื่อให้แน่ใจว่ามีการนำความปลอดภัยมาใช้อย่างถูกต้อง

ในทางกลับกันหากแอปพลิเคชันของคุณมี 'สกิน' ที่แตกต่างกันโดยมีการเปลี่ยนสีการเปลี่ยนแปลงแบบอักษร ฯลฯ คุณสามารถตั้งค่าผู้ใช้ตั้งค่าได้ดังนี้

ApplicationSkin        string     User              DefaultSkin

จากนั้นเมื่อมิเชลล์เปลี่ยนเป็นสกินที่เธอต้องการแอปพลิเคชันจะจดจำการตั้งค่าของเธอ คุณสมบัติอาจมีลักษณะดังนี้:

ApplicationSkin        string     User              HelloKittySkin

คุณช่วยอธิบายโดยใช้ตัวอย่างได้ไหม
Parag Meshram

1
การตั้งค่าเริ่มต้นอยู่ในไฟล์ config ใช่หรือไม่? แต่การตั้งค่าผู้ใช้ที่บันทึกไว้จะถูกเก็บไว้ที่ไหน?
Kyle Delaney

8
การตั้งค่าแอพจะถูกบันทึกลงในไฟล์ * .exe.config การตั้งค่าผู้ใช้จะถูกบันทึกลงใน c: \ users \ <userid> \ AppData \ Local \ <companyname> \ <appname> \ <version> \ user.config (ซึ่งในภายหลังจะถูกดึงออกมาจากไฟล์ประกอบ) เมื่อโหลดการตั้งค่าผู้ใช้จะมีความสำคัญเหนือกว่าการตั้งค่าแอพ
Schrodo_Baggins

71

การตั้งค่าขอบเขตแอปพลิเคชันเป็นแบบอ่านอย่างเดียวและสามารถเปลี่ยนแปลงได้ในเวลาออกแบบเท่านั้นหรือโดยการแก้ไขไฟล์. exe.config ระหว่างเซสชันของแอปพลิเคชัน อย่างไรก็ตามการตั้งค่าขอบเขตผู้ใช้สามารถเขียนได้ในขณะทำงานเช่นเดียวกับที่คุณเปลี่ยนค่าคุณสมบัติใด ๆ ค่าใหม่จะยังคงอยู่ตลอดระยะเวลาของเซสชันแอปพลิเคชัน คุณสามารถเปลี่ยนแปลงการตั้งค่าผู้ใช้ระหว่างเซสชันแอปพลิเคชันได้โดยเรียกใช้วิธีการตั้งค่าบันทึก

ที่มาบน msdn: การใช้การตั้งค่าใน C #

โดยทั่วไปการตั้งค่าผู้ใช้จะใช้สำหรับการตั้งค่าของผู้ใช้ที่มีอยู่ (เช่นการตั้งค่าการแจ้งเตือนของแอปเป็นต้น) โดยทั่วไปการตั้งค่าแอปพลิเคชันสำหรับรายการต่างๆเช่นคีย์ API เป็นต้น

ตามที่ระบุไว้โดย @kmote เมื่อการตั้งค่าผู้ใช้ถูกแก้ไขและคงอยู่ในขณะทำงาน (ผ่านsettings.Save()) การตั้งค่าเหล่านี้จะถูกเขียนไปยังโฟลเดอร์ภายในที่เก็บข้อมูลโปรไฟล์ผู้ใช้ (โดยทั่วไปคือ C: \ Users \ Username \ AppData \ Local \ AppNameใน Windows 7 ขึ้นไป ). ในการกำหนดตำแหน่งของไฟล์โดยทางโปรแกรมโปรดดูโพสต์นี้


ตัวอย่างสดใด ๆ จะได้รับการชื่นชมมาก
Parag Meshram

1
นอกจากนี้ควรระบุด้วยว่าไม่สามารถเปลี่ยนการตั้งค่าผู้ใช้โดยแก้ไขไฟล์. config ระหว่างเซสชัน
kmote

@kmote ทำได้แน่นอน! หากเซสชันถูกปิดคุณสามารถเปลี่ยนการกำหนดค่า (และดังนั้นการตั้งค่าผู้ใช้) การเปลี่ยนแปลงยังคงมีอยู่และสะท้อนให้เห็นในโปรแกรมเมื่อคุณเริ่มเซสชันอีกครั้ง ... ฉันทดสอบไปแล้ว
Riegardt Steyn

5
@ Heeliac: ฉันควรจะแม่นยำกว่านี้ คุณถูกต้องที่สามารถเปลี่ยนการตั้งค่าผู้ใช้ระหว่างเซสชันได้ อย่างไรก็ตามเมื่อคุณเปลี่ยนโดยใช้โปรแกรม (โดยใช้Settings.Save()) ไฟล์กำหนดค่าใหม่จะถูกสร้างขึ้นและถูกซ่อน / ฝังไว้ใน C: \ Users [ชื่อผู้ใช้] \ AppData \ Local \ Microsoft จากจุดนั้นเมื่อใดก็ตามที่แอปพลิเคชันเริ่มทำงานการตั้งค่าผู้ใช้จะถูกดึงมาจากไฟล์นั้นโดยเฉพาะและการเปลี่ยนแปลงใด ๆ ที่ทำด้วยตนเองใน App.config หรือ Settings.settings จะถูกละเว้น
kmote

มีวิธีค้นหาและดูเนื้อหาของไฟล์กำหนดค่าผู้ใช้นี้หรือไม่?
Kyle Delaney
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.