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

C# Settings.Default.Upgrade()不保留当前设置,c#,settings,upgrade,C#,Settings,Upgrade,我有一个使用内置设置功能的WPF应用程序。发布应用程序的新版本时,我会增加程序集版本,并在应用程序启动时执行以下代码: if (Settings.Default.IsSettingsUpgradeRequired) //this defaults to true when a new version of this software has been released { Settings.Default.Upgrade(); //upgr

我有一个使用内置设置功能的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\中的文件夹结构如下所示:

  • myApp.exe_Url_5s2axp5sywfyhblm320qetpqnmwnvsc
  • myApp.exe_Url_ft4ih1ze0qsz5abu11t334omxo1431c0
  • myApp.exe_Url_glsc2d3cjmswry2bxebb53jndfptav1x
  • myApp.exe_Url_qngn1rqmbfyy42fdgpmc3ystaknuxnv
  • myApp.exe_Url_vqn0ogftrchl1fild5fe34hmijvmd2zr
那么,如何停止系统创建这么多文件夹,并使其在每个应用程序中仅使用一个文件夹,以便正确升级设置


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

我终于让它工作了。我不知道脱衣行为的原因,但有两件事解决了它:

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

Project->Properties->Application->Manifest=Embed Manifest with default settings

在用于更新设置的代码中,我没有使用
Reload()
,它工作正常。尝试删除它。已尝试,但不会更改任何内容。问题是系统为每个软件版本创建了一个新的应用程序文件夹,好像它不认识到它是同一个应用程序……也许它与拥有/没有清单文件有关?或者我可能需要在申请表上签名吗?你是如何添加IsSettingsUpgradeRequired的?