为什么持久化的用户设置没有加载?

8
我有一个Windows应用程序,使用一个程序集来存储一些配置设置在默认的应用程序设置中。
这些设置可以在运行时更改,并且会被持久化保存如下:
Properties.Settings.Default.SelectedCOMPort = options.SelectedCOMPort;
Properties.Settings.Default.Save();

设置已正确保存,并通过查看保存在用户应用程序目录中的user.config文件进行确认。例如:
C:\Documents and Settings\e399536\Local Settings\Application Data\MyCompany\MyTool

然而,当工具关闭并重新启动时,所有设置都会加载其默认值。

一旦应用程序运行,检查用户配置文件可以确认设置仍然保存。

设置的加载方式如下:

options.SelectedCOMPort = Properties.Settings.Default.SelectedCOMPort;

为什么使用默认设置而不是保存的设置?

我有什么遗漏吗?

@Tenaciouslmpy 设置在程序集的构造函数中加载,该程序集本身在主程序集的窗体加载事件中加载。

@Austin 这是一个独立的应用程序,我正在Visual Studio中进行调试。


你能否发布一下加载字符串设置的代码? - Austin Salonen
你什么时候加载设置?在窗体的生命周期中哪个事件? - keyboardP
这是从独立安装还是从IDE运行的? - Austin Salonen
2个回答

12

如果在多次运行之间重新编译应用程序,请注意它会将其视为新版本的应用程序,并且不会自动加载每个用户的设置。在这种情况下,您需要调用Settings.Default.Upgrade。

一种仅在需要时执行此操作的方法是向应用程序的默认每个用户设置添加一个NeedsUpgrade设置(值为True)。在应用程序启动时,检查NeedsUpgrade是否为true。如果是,则调用Upgrade,将NeedsUpgrade设置为False并保存设置。下次更改应用程序版本时,NeedsUpgrade将重置为True,然后您将自动调用Upgrade以再次引入任何现有用户设置。

确保在调用Upgrade之后设置NeedsUpgrade,否则在升级设置时会将其清除。

if (Settings.Default.NeedsUpgrade)
{
    Settings.Default.Upgrade();
    Settings.Default.NeedsUpgrade = false;
    Settings.Default.Save();
}

我没有重新编译,但是我正在IDE中进行调试,这似乎是同样的事情。无论如何,“Upgrade()”提示解决了问题。干杯。 - Kildareflare
我在IDE(VS.2015)的调试会话中遇到了这个问题。设置已恢复为默认值。我实现了NeedUpgrade提示,但问题仍然存在。 - Lord of Scripts
1
我刚刚在VS 2015社区版中测试过它,它对我仍然有效。需要注意的是,现在这种行为似乎更智能了;除非程序集版本发生改变,否则它不会将NeedUpgrade重置为true;仅仅重新构建应用程序已经不再起作用了。 - technophile

2

看起来你正在使用Visual Studio调试应用程序,每次开始新会话时都会使用默认数据。

如果你在已安装的版本中看到这个问题,那么我猜你实际上并没有使用你认为你在使用的字符串值。


啊,就是这样了,干杯。 - Kildareflare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接