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

Posted

技术标签:

【中文标题】App.config:用户与应用程序范围【英文标题】:App.config: User vs Application Scope 【发布时间】:2012-10-14 08:33:54 【问题描述】:

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

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

    用户 应用

如果我将设置定义为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 作用域有什么区别,在什么情况下应该在这两者之间进行选择?

【问题讨论】:

【参考方案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\\AppData\Local\\\\user.config (后者是从程序集文件中提取的)。加载时,用户设置优先于应用设置。

以上是关于App.config:用户与应用程序范围的主要内容,如果未能解决你的问题,请参考以下文章

从以前版本的 app.config 文件自动“升级”用户设置?

web.config与.dll中的app.config

如何重新创建 app.config.exe.config

公用文件夹上的 Windows 窗体 app.config

.NET 桌面应用程序中的 Settings.settings 与 app.config [重复]

如何在不使用用户设置的情况下在运行时读取/写入 app.config 设置?