如何在文件版本更改中保留.settings / .config文件中的更改?

时间:2010-03-19 13:23:32

标签: c# .net settings.settings

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

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

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

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

3 个答案:

答案 0 :(得分:58)

一些澄清:

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

Properties.Settings.Default.Upgrade();

何时/何地调用Upgrade方法?您可以应用一个简单的技巧:将名为UpgradeRequired(示例)的用户设置定义为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时)

答案 1 :(得分:24)

Markus Olsson已经给出了一个非常好的答案here

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

答案 2 :(得分:1)

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