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

Inv*_*ion 43 .net c# settings.settings

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

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

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

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

spl*_*tne 60

一些澄清:

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

Properties.Settings.Default.Upgrade();
Run Code Online (Sandbox Code Playgroud)

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

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

  if (Properties.Settings.Default.UpgradeRequired)
  {
      Properties.Settings.Default.Upgrade();
      Properties.Settings.Default.UpgradeRequired = false;
      Properties.Settings.Default.Save();
  }
Run Code Online (Sandbox Code Playgroud)

因此,仅在版本更改后才会调用Upgrade方法,并且只会调用一次(因为您通过设置禁用进一步升级UpgradeRequired = false直到版本更改 - 当属性重新获得默认值时true).

  • 除了"UpgradeRequired"之外,我还将应用程序的版本存储为设置.这允许您执行自定义升级转换(即,无效值/有效值除了 - 最新版本的默认/ -same值之外).您可以使用代码将需要转换的每个适用版本转换为需要转换的下一个最低版本,并将代码菊花链连接在一起,从而:a)降低最新版本转换代码的复杂性,以及b)允许重新转换旧转换代码. (3认同)

Voi*_*ler 25

马库斯奥尔森已经在这里给出了一个很好的答案.

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