为什么未加载持久用户设置?

Kil*_*are 8 c# windows settings persistence winforms

我有一个Windows应用程序,它使用一个程序集,在默认的应用程序设置中存储一些配置设置.

设置可以在运行时更改并保持不变:

Properties.Settings.Default.SelectedCOMPort = options.SelectedCOMPort;
Properties.Settings.Default.Save();
Run Code Online (Sandbox Code Playgroud)

设置已正确保存,我通过查看保存在用户应用程序目录中的user.config文件来确认

C:\Documents and Settings\e399536\Local Settings\Application Data\MyCompany\MyTool
Run Code Online (Sandbox Code Playgroud)

但是,当工具关闭然后再次启动时,所有设置都会加载其默认值.

应用程序运行后检查user.config文件确认设置​​仍然保存.

因此加载设置:

options.SelectedCOMPort = Properties.Settings.Default.SelectedCOMPort;
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么吗?

@ Tenaciouslmpy在程序集的构造函数期间加载设置,该构造函数本身在主程序集的表单load事件中加载.

@ Austin这是我在Visual Studio中调试的独立应用程序.

tec*_*ile 11

如果您在运行之间重新编译应用程序,请注意它将考虑新版本的应用程序,并且不会自动加载每个用户的设置.在这种情况下,您需要调用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();
}
Run Code Online (Sandbox Code Playgroud)