96

我在我的项目中添加了 App.config 文件。我从 Project > Properties > Settings 面板创建了两个设置 -

在此处输入图像描述

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

  1. 用户
  2. 应用

如果我User在进入部分时定义设置userSettings
如果我Application在进入applicationSettings部分时定义设置

应用程序配置

<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,在什么情况下应该在这两者之间进行选择?

4

2 回答 2

79

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

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

SecurityModuleVersion  string     Application      v1.21

稍后,当您重构安全模块时,可能会在部署时将值更改为 v1.22,以确保实施正确的安全性

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

ApplicationSkin        string     User              DefaultSkin

然后,当 Michelle 更改为她喜欢的皮肤时,应用程序会记住她的设置。属性现在可能如下所示:

ApplicationSkin        string     User              HelloKittySkin
于 2012-10-24T10:05:54.110 回答
73

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

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

用户设置通常用于持久化用户偏好(例如应用通知偏好等)。应用程序设置通常用于 API 密钥等项目。

正如@kmote 所指出的,当用户设置在运行时(通过settings.Save())被修改和持久化时,它们将被写入用户配置文件存储中的一个文件夹(在 Windows 7 及更高版本中通常为 C:\Users\ Username \AppData\Local\ AppName)。为了以编程方式确定文件的位置,请参阅这篇文章

于 2012-10-24T10:03:52.863 回答