我创建了一个应用程序,它使用settings.settings来存储一些用户特定的设置(范围=用户)。设置在启动时正确加载,在使用过程中更改并正确保存以供下次启动。这个周期似乎没有问题。
当我更新新版本的程序集和文件版本时,会出现问题。启动时不再加载设置(而是使用默认值)。即使启动版本1.2并且生成并保存了新的配置文件(即,您可以重新启动版本1.1并且配置文件将是从该文件保存的配置文件),似乎从版本1.1保存的配置文件将保持不变。版本)。
因此,设置似乎特定于程序集和/或文件的版本。值得注意的是,在版本1.1和版本1.2之间没有对settings.settings文件或其他任何内容进行任何更改(即,我在这些不同版本之间进行的唯一更改是修改版本号)。
有没有办法在版本更改后保留这些设置?
答案 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方式。