我有一个使用内置设置功能的 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),应用程序将在首次启动时创建一个新的设置文件夹。为什么系统不识别为同一个应用程序?
我终于让它发挥作用了。我不知道所描述的行为的原因,但以下两件事之一解决了它:
激活签名将确保仅生成一个文件夹
\应用程序数据\本地\
还需要在应用程序启动后执行
Settings.Default.Upgrade()
项目 -> 属性 -> 应用程序 -> 清单 = 使用默认设置嵌入清单
我在 2022 年使用 .NET6,只需在应用程序启动期间添加它就对我有用:
Settings.Default.Upgrade();
有点晚了,但为了完整起见:
我不确定以前的版本是如何处理它的,但是当我将我的 Winforms 应用程序迁移到 .NET 8 时,
Settings.Default.Upgrage()
被破坏了,其他答案中提到的所有事情都没有帮助。
就我而言,罪魁祸首似乎是应用程序同时使用本地和漫游设置,因此在不同的文件夹中创建了 2 个
user.config
文件。这在某种程度上干扰了设置升级。
将所有设置(用户级和应用程序级)更改为
Local
后,Visual Studio 会默默地将 app.config
文件添加到项目中,并且设置开始正确升级。从技术上讲,我仍然不确定是否缺少 app.config
文件,或者是否存在 Roaming
设置,但无论如何它都修复了它们。
HTH