App.config: Phạm vi người dùng so với ứng dụng


90

Tôi đã thêm tệp App.config trong dự án của mình. Tôi đã tạo hai cài đặt từ bảng Project> Properties> Settings -

nhập mô tả hình ảnh ở đây

Tôi nhận thấy rằng khi tôi thêm một cài đặt, tôi có thể xác định phạm vi là Userhoặc Application. -

  1. Người sử dụng
  2. Ứng dụng

Nếu tôi xác định cài đặt khi Usernó chuyển đến userSettingsphần,
nếu tôi xác định cài đặt khi Applicationnó chuyển đến applicationSettingsphần

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>

Tuy nhiên, các cài đặt này có thể được truy cập theo cùng một cách từ .cs-

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

Sự khác biệt giữa UserApplicationphạm vi là gì và trong những trường hợp nào người ta nên chọn giữa hai phạm vi này?

Câu trả lời:


72

Về cơ bản, cài đặt ứng dụng không thể thay đổi trong quá trình chạy chương trình và cài đặt người dùng có thể. Sau đó, những cài đặt người dùng này sẽ được lưu để người dùng có trải nghiệm quen thuộc khi (các) họ chạy ứng dụng tiếp theo.

Chỉnh sửa: Đối với các ví dụ, bạn có thể viết ứng dụng của mình với các mô-đun khác nhau và cần đảm bảo rằng mô-đun chính của bạn đang sử dụng đúng phiên bản mô-đun bảo mật của bạn. Đối với điều này, bạn sẽ thiết lập một cài đặt phạm vi ứng dụng, ví dụ:

SecurityModuleVersion  string     Application      v1.21

Đôi khi sau đó khi bạn cấu trúc lại mô-đun bảo mật, bạn có thể thay đổi giá trị thành v1.22 khi bạn triển khai để đảm bảo bảo mật chính xác đang được triển khai

Mặt khác, nếu ứng dụng của bạn có các 'giao diện' khác nhau với các thay đổi màu sắc, thay đổi phông chữ, v.v., thì bạn có thể thiết lập cài đặt người dùng như sau:

ApplicationSkin        string     User              DefaultSkin

Sau đó, khi Michelle thay đổi làn da mà cô ấy thích, ứng dụng sẽ ghi nhớ cài đặt của cô ấy . Các thuộc tính bây giờ có thể trông giống như:

ApplicationSkin        string     User              HelloKittySkin

bạn có thể giải thích bằng cách sử dụng một ví dụ?
Parag Meshram

1
Cài đặt mặc định nằm trong tệp cấu hình, phải không? Nhưng cài đặt người dùng đã lưu được lưu trữ ở đâu?
Kyle Delaney

7
Cài đặt ứng dụng được lưu vào tệp * .exe.config. Cài đặt người dùng được lưu vào c: \ users \ <userid> \ AppData \ Local \ <companyname> \ <appname> \ <version> \ user.config (nơi sau này được lấy từ tệp lắp ráp). Khi tải, cài đặt người dùng được ưu tiên hơn cài đặt ứng dụng.
Schrodo_Baggins

71

Cài đặt phạm vi ứng dụng chỉ được đọc và chỉ có thể được thay đổi tại thời điểm thiết kế hoặc bằng cách thay đổi tệp .exe.config giữa các phiên ứng dụng. Tuy nhiên, cài đặt phạm vi người dùng có thể được viết trong thời gian chạy, giống như bạn sẽ thay đổi bất kỳ giá trị thuộc tính nào. Giá trị mới vẫn tồn tại trong suốt thời gian của phiên ứng dụng. Bạn có thể duy trì các thay đổi đối với cài đặt người dùng giữa các phiên ứng dụng bằng cách gọi phương thức Settings.Save.

Nguồn trên msdn: Sử dụng Cài đặt trong C #

Cài đặt người dùng thường được sử dụng cho các tùy chọn người dùng lâu dài (ví dụ: tùy chọn thông báo ứng dụng, v.v.). Cài đặt ứng dụng thường dành cho các mục như khóa API, v.v.

Theo lưu ý của @kmote, khi cài đặt người dùng được sửa đổi và duy trì tại thời điểm chạy (qua settings.Save()), chúng sẽ được ghi vào một thư mục trong bộ nhớ Hồ sơ người dùng (thường là C: \ Users \ Username \ AppData \ Local \ AppName trong Windows 7 trở lên ). Để xác định vị trí của tệp theo chương trình, vui lòng xem bài đăng này .


bất kỳ ví dụ sống sẽ được nhiều đánh giá cao
Parag Meshram

1
Cũng cần chỉ ra rằng không thể thay đổi cài đặt Người dùng bằng cách chỉnh sửa tệp .config giữa các phiên.
kmote

@kmote Tất nhiên bạn có thể! Nếu phiên đóng cửa, bạn có thể thay đổi cấu hình (và do đó là userSetting). Sự thay đổi vẫn tồn tại và phản ánh trong chương trình khi bạn bắt đầu lại phiên ... Tôi đã thử nghiệm nó ngay bây giờ.
Riegardt Steyn

5
@Heliac: Tôi nên nói chính xác hơn. Bạn đúng rằng userSettings có thể được thay đổi giữa các phiên. TUY NHIÊN, sau khi bạn thay đổi chúng theo chương trình (sử dụng Settings.Save()), một tệp cấu hình mới sẽ được tạo và được ẩn / chôn trong C: \ Users [tên người dùng] \ AppData \ Local \ Microsoft. Kể từ thời điểm đó, bất cứ khi nào ứng dụng được khởi động, cài đặt người dùng sẽ được lấy riêng từ tệp đó và mọi thay đổi được thực hiện theo cách thủ công trong App.config hoặc Settings.settings sẽ bị bỏ qua.
kmote

Có cách nào để tìm và xem nội dung của tệp cấu hình người dùng này không?
Kyle Delaney
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.