这很奇怪。
我已经使用一些设置创建了一个app.config文件。
Visual Studio创建一个类来“轻松”管理设置,但是由于某种原因,当我打电话时
Properties.Settings.Default.UrlImportacion
将检索默认设置(在设计时设置的默认设置)。当我更改app.config文件中的值时,仅检索默认值。
我尝试将设置添加到applicationSettings组和userSettings组中。无论我做什么,系统总是会获得默认设置。
对此有解释吗?
谢谢海梅
应用程序范围设置是只读的,可以在设计时更改,也可以通过在应用程序会话之间更改.config
文件来更改。
用户范围的设置可以在运行时编写,但是如果更改/删除/添加设置,则需要调用Properties.Settings.Default.Save();
方法来保存应用程序会话之间的设置更改;否则,每次检测到更改时,设置可能会被清除。
要检查您的更改是否保留,您可以在此处%userprofile%\appdata\local
或%userprofile%\Local Settings\Application Data
中找到用户设置。
更新
如果我对您的了解很好,那么此解决方案将为您服务。
我试图通过将bin文件夹的内容复制到新项目并手动更改ProjectName.exe.config
和App.config
文件来模拟您的情况,Color
的默认值(在旧项目中)为Green
,但我的期望值为Purple
。
此部分是我同时添加到ProjectName.exe.config
和App.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的对比,前者将加载最后一组已保存的应用程序设置值,而后者将加载已保存的默认值。