我在项目中添加了App.config文件。 我从Project>创建了两个设置。属性>设置面板 -
我注意到,当我添加设置时,我可以将范围定义为User
或Application
。 -
如果我将设置定义为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
范围之间有什么区别,在什么情况下应该在这两者之间做出选择?
答案 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