App.config:用户与应用程序范围
Posted
技术标签:
【中文标题】App.config:用户与应用程序范围【英文标题】:App.config: User vs Application Scope 【发布时间】:2012-10-14 08:33:54 【问题描述】:我在我的项目中添加了 App.config 文件。 我从 Project > Properties > Settings 面板创建了两个设置 -
我注意到当我添加一个设置时,我可以将范围定义为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
作用域有什么区别,在什么情况下应该在这两者之间进行选择?
【问题讨论】:
【参考方案1】:应用程序范围设置是只读的,只能在设计时或通过在应用程序会话之间更改 .exe.config 文件来更改。但是,用户范围设置可以在运行时编写,就像您更改任何属性值一样。新值在应用程序会话期间持续存在。您可以通过调用 Settings.Save 方法在应用程序会话之间保留对用户设置的更改。
msdn 上的来源:Using Settings in C#
用户设置通常用于保持用户偏好(例如应用通知偏好等)。应用程序设置通常用于 API 密钥等项目。
正如@kmote 所指出的,当用户设置在运行时被修改并保留(通过settings.Save()
)时,它们将被写入用户配置文件存储中的一个文件夹(通常是 C:\Users\用户名\AppData\Local\AppName 在 Windows 7 及更高版本中)。要以编程方式确定文件的位置,请参阅this post。
【讨论】:
任何活生生的例子都将不胜感激 还应该指出,用户设置不能通过在会话之间编辑.config文件来更改。 @kmote 当然可以!如果会话关闭,您可以更改配置(以及用户设置)。当您再次启动会话时,更改仍然存在并反映在程序中......我刚刚测试了它。 @Heliac:我应该更准确。可以在会话之间更改 userSettings 是正确的。但是,一旦您以编程方式更改它们(使用Settings.Save()
),就会创建一个 new 配置文件并隐藏/埋在 C:\Users[username]\AppData\Local\Microsoft 中。从那时起,无论何时启动应用程序,用户设置都将从 那个 文件中提取,并且在 App.config 或 Settings.settings 中手动进行的任何更改都将被忽略。
有没有办法找到并查看这个用户配置文件的内容?【参考方案2】:
基本上,在程序运行期间不能更改应用程序设置,而用户设置可以。然后应保存这些用户设置,以便用户在下次运行应用程序时获得熟悉的体验。
编辑: 例如,您可能使用不同的模块编写应用程序,并且需要确保您的主模块使用正确版本的安全模块。为此,您将设置一个应用程序范围设置,例如:
SecurityModuleVersion string Application v1.21
稍后,当您重构安全模块时,您可能会在部署时将值更改为 v1.22,以确保实施正确的安全性
另一方面,如果您的应用程序有不同的“皮肤”,包括颜色变化、字体变化等,那么您可以设置如下用户设置:
ApplicationSkin string User DefaultSkin
然后,当 Michelle 更改为她喜欢的皮肤时,应用程序会记住她的设置。属性现在可能如下所示:
ApplicationSkin string User HelloKittySkin
【讨论】:
你能用一个例子解释一下吗? 默认设置在配置文件中,是吗?但是保存的用户设置存储在哪里? 应用设置保存到 *.exe.config 文件。用户设置保存到 c:\users\以上是关于App.config:用户与应用程序范围的主要内容,如果未能解决你的问题,请参考以下文章
从以前版本的 app.config 文件自动“升级”用户设置?