52

我创建了一个应用程序,它使用 settings.settings 来存储一些用户特定的设置(范围=用户)。设置在启动时正确加载,在使用过程中更改并正确保存以供下次启动。这个循环似乎没有问题。

当我为新版本更新程序集和文件版本时,就会出现问题。启动时不再加载设置(而是使用默认值)。即使启动了 1.2 版并生成并保存了新的配置文件,从 1.1 版保存的配置文件似乎也将持续存在(即,您可以重新启动 1.1 版,配置文件将是从该版本保存的配置文件版本)。

因此,这些设置似乎特定于程序集和/或文件的版本。还值得注意的是,在 1.1 版和 1.2 版之间,settings.settings 文件或其他任何内容都没有更改(即,我在这些不同版本之间所做的唯一更改是修改版本号)。

有没有办法在版本更改中保留这些设置?

4

3 回答 3

72

一些澄清:

您必须调用派生类的Upgrade方法ApplicationSettingsBase(通常调用Settings并由 Visual Studio 为您创建):

Properties.Settings.Default.Upgrade();

何时/何地调用该Upgrade方法?您可以应用一个简单的技巧:将名为UpgradeRequired(example) 的用户设置定义为bool(最简单的方法是通过 IDE)。确保其默认值为true.

在应用程序的开头插入这段代码:

  if (Properties.Settings.Default.UpgradeRequired)
  {
      Properties.Settings.Default.Upgrade();
      Properties.Settings.Default.UpgradeRequired = false;
      Properties.Settings.Default.Save();
  }

因此 Upgrade 方法只会在版本更改后调用一次(因为您通过设置UpgradeRequired = false直到版本更改来禁用进一步升级 - 当属性恢复默认值时true)。

于 2010-04-23T12:13:24.050 回答
30

Markus Olsson 已经在这里给出了一个很好的答案。

本质上,您将需要使用ApplicationSettingsBase.Upgrade()方法。

于 2010-03-23T07:38:52.810 回答
2

我希望其他人有更好的答案。几年前我有这个问题,我能找到的唯一解决方案(确实有效)是使用我自己的机制来存储设置,而不是默认的内置 .NET 方式。

于 2010-03-21T01:29:01.697 回答