app.config文件和基础类中设置的奇怪情况

问题描述 投票:0回答:1

这很奇怪。

我已经使用一些设置创建了一个app.config文件。

Visual Studio创建一个类来“轻松”管理设置,但是由于某种原因,当我打电话时

Properties.Settings.Default.UrlImportacion

将检索默认设置(在设计时设置的默认设置)。当我更改app.config文件中的值时,仅检索默认值。

我尝试将设置添加到applicationSettings组和userSettings组中。无论我做什么,系统总是会获得默认设置。

对此有解释吗?

谢谢海梅

c# console-application app-config
1个回答
1
投票

应用程序范围设置是只读的,可以在设计时更改,也可以通过在应用程序会话之间更改.config文件来更改。

用户范围的设置可以在运行时编写,但是如果更改/删除/添加设置,则需要调用Properties.Settings.Default.Save();方法来保存应用程序会话之间的设置更改;否则,每次检测到更改时,设置可能会被清除。

要检查您的更改是否保留,您可以在此处%userprofile%\appdata\local%userprofile%\Local Settings\Application Data中找到用户设置。

更新

如果我对您的了解很好,那么此解决方案将为您服务。

我试图通过将bin文件夹的内容复制到新项目并手动更改ProjectName.exe.configApp.config文件来模拟您的情况,Color的默认值(在旧项目中)为Green,但我的期望值为Purple

此部分是我同时添加到ProjectName.exe.configApp.config文件中的内容

<userSettings>
    <Namespace.Properties.Settings>
      <setting name="Color" serializeAs="String">
        <value>Purple</value>
      </setting>
    </Namespace.Properties.Settings>
</userSettings>

在完成Properties.Settings.Default.Color的上述输出后为Green

但是为什么会这样呢?因为默认值已缓存,并且如果框架无法访问或打开config文件,它将使用默认值。

显然,问题已解决。您可以通过在尝试读取值之前调用Reload方法来解决此问题:

Properties.Settings.Default.Reload();
var color = Properties.Settings.Default.Color;

its documentation中所述:

Reload方法清除当前缓存的属性值,从而在以后访问它们时从持久性存储中重新加载这些值。该方法执行以下操作:

  • 它通过清除由PropertyValues属性表示的集合来清除当前缓存的属性。

  • 它为Properties集合的每个成员引发PropertyChanged事件。

重新加载与Reset的对比,前者将加载最后一组已保存的应用程序设置值,而后者将加载已保存的默认值。

© www.soinside.com 2019 - 2024. All rights reserved.