【问题标题】:Settings.Default.Upgrade() does not keep current settingsSettings.Default.Upgrade() 不保留当前设置
【发布时间】:2017-03-06 07:13:24
【问题描述】:

我有一个使用内置设置功能的 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_5s2axp5sywfyhblm3201qetpqnmwnvsc
  • myApp.exe_Url_ft4ih1ze0qsz5a​​bu11t334omxo1431c0
  • myApp.exe_Url_glsc2d3cjmswry2bxebb53jndfptav1x
  • myApp.exe_Url_qngn1rqmbfyy42fdgpmc3ystsaknuxnv
  • myApp.exe_Url_vqn0ogftrchl1fild5fe34hmijvmd2zr

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

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

【问题讨论】:

  • 我没有在用于更新设置的代码中使用Reload(),它工作正常。尝试删除它。
  • 已经试过了,没有任何改变。问题是系统会为每个软件版本创建一个新的应用程序文件夹,就好像它没有识别出它是同一个应用程序一样......
  • 也许它与有/没有清单文件有关?还是我可能必须签署申请?
  • 你是如何添加 IsSettingsUpgradeRequired 的?

标签: c# settings upgrade


【解决方案1】:

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

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

【讨论】:

  • 你在 assemblyIdentity 中做了什么改变?
  • @mrid:没什么特别的,只要这样设置:
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多