App.config:用户与应用程序范围


90

我在项目中添加了App.config文件。我从“项目”>“属性”>“设置”面板中创建了两个设置-

在此处输入图片说明

我注意到,当我添加设置时,可以将范围定义为UserApplication。--

  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;

UserApplication范围之间有什么区别?在什么情况下应在两者之间选择?

Answers:


72

基本上,在程序运行期间无法更改应用程序设置,而用户设置可以更改。然后应保存这些用户设置,以便在下次运行应用程序时为用户提供熟悉的体验。

编辑:例如,您可能使用不同的模块编写应用程序,并且需要确保您的主模块使用的是正确版本的安全模块。为此,您将设置一个应用程序范围设置,例如:

SecurityModuleVersion  string     Application      v1.21

一段时间后,当你重构的安全模块,可以在部署,以确保正确的安全正在实施的值更改为V1.22

另一方面,如果您的应用程序具有不同的“皮肤”,例如颜色,字体变化等,那么您可以设置用户设置,如下所示:

ApplicationSkin        string     User              DefaultSkin

然后,当Michelle更改为她喜欢的皮肤时,应用程序会记住她的设置。这些属性现在看起来像:

ApplicationSkin        string     User              HelloKittySkin

你能用一个例子解释吗?
Parag Meshram 2013年

1
默认设置在配置文件中,是吗?但是保存的用户设置存储在哪里?
Kyle Delaney

7
应用程序设置将保存到* .exe.config文件。用户设置将保存到c:\ users \ <用户标识> \ AppData \ Local \ <公司名称> \ <应用程序名称> \ <版本> \ user.config(其中的更高版本从程序集文件中提取)。加载时,用户设置优先于应用程序设置。
Schrodo_Baggins

71

应用程序作用域设置是只读的,只能在设计时或通过在应用程序会话之间更改.exe.config文件进行更改。但是,用户范围设置可以在运行时写入,就像您更改任何属性值一样。新值在应用程序会话期间持续存在。您可以通过调用Settings.Save方法在应用程序会话之间持久保存对用户设置的更改。

msdn上的源代码:在C#中使用设置

用户设置通常用于保留用户首选项(例如,应用程序通知首选项等)。应用程序设置通常用于API密钥等项目。

如@kmote所述,在修改用户设置并在运行时settings.Save()将其保留(通过)时,它们将被写入用户配置文件存储中的文件夹中(在Windows 7及更高版本中,通常为C:\ Users \ Username \ AppData \ Local \ AppName))。为了以编程方式确定文件的位置,请参阅此文章


任何现场的例子都将不胜感激
Parag Meshram

1
还应指出,不能通过在会话之间编辑.config文件来更改用户设置。
kmote

@kmote当然可以!如果会话关闭,则可以更改配置(并因此更改userSetting)。当您再次开始会话时,更改仍然存在并反映在程序中……我刚刚进行了测试。
Riegardt Steyn

5
@Heliac:我应该更精确一些。您可以在会话之间更改userSettings是正确的。但是,一旦以编程方式(使用Settings.Save())更改了它们,就会创建一个新的配置文件,并将其隐藏/隐藏在C:\ Users [用户名] \ AppData \ Local \ Microsoft中。从那时起,无论何时启动应用程序,都将从文件中独占绘制用户设置,并且在App.config或Settings.settings中手动进行的任何更改都将被忽略。
kmote

有没有找到和查看此用户配置文件内容的方法?
Kyle Delaney
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.