Settings.Default.Upgrade() 不保留当前设置

Settings.Default.Upgrade() does not keep current settings

我有一个使用内置设置功能的 WPF 应用程序。当我发布新版本的应用程序时,我增加程序集版本并在应用程序启动时执行以下代码:

if (Settings.Default.IsSettingsUpgradeRequired) //this defaults to true when a new version of this software has been released
            {
                Settings.Default.Upgrade(); //upgrade the settings to the newer version
                Settings.Default.Reload();
                Settings.Default.IsSettingsUpgradeRequired = false;
                Settings.Default.LastSettingsUpdate = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
                Settings.Default.Save();
            }

问题是没有保持之前的设置。相反,每次出现新版本时,都会在 \AppData\Local\ 下创建一个新文件夹。因此,使用默认设置而不是以前版本的设置。我知道,在正常情况下,应该有一个文件夹,其中包含许多以应用程序版本为名称的子文件夹。相反,我有许多文件夹,每个文件夹只包含一个以应用程序版本作为名称的文件夹。 Local\ 中的文件夹结构如下所示:

那么如何阻止系统创建这么多文件夹并使每个应用程序只使用一个文件夹,以便我可以正确升级我的设置?

编辑: 我今天注意到的另一件事是,如果我更改应用程序文件夹的位置(假设将其从桌面移动到 C:\myApp),应用程序会创建首次启动时的新设置文件夹。为什么系统不识别为同一个应用?

我终于让它工作了。我不知道描述行为的原因,但以下两件事之一解决了它:

  • 添加了默认清单文件并更改了"assemblyIdentity"节点("version"属性似乎对设置没有影响)
  • 激活 Visual Studio 的签名功能(项目属性 --> 签名)

项目 -> 属性 -> 应用程序 -> 清单 = 使用默认设置嵌入清单

@cleo 感谢您的解决方案。签名解决了这个问题。文件夹名称不再更改。

\AppData\Local\MyAppName.exe_StrongName_iyq1qat10dlrezghdzsmthpr49hlodkj

我在 2022 年使用 .NET6,只是在应用程序启动期间添加这个对我有用:

Settings.Default.Upgrade();