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

时间:2012-10-24 10:00:12

标签: c# .net winforms app-config application-settings

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

enter image description here

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

  1. 用户
  2. 应用
  3. 如果我将设置定义为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范围之间有什么区别,在什么情况下应该在这两者之间做出选择?

2 个答案:

答案 0 :(得分:67)

  

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

msdn上的来源:Using Settings in C#

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

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

答案 1 :(得分:63)

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

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

SecurityModuleVersion  string     Application      v1.21

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

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

ApplicationSkin        string     User              DefaultSkin

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

ApplicationSkin        string     User              HelloKittySkin