如何在.net中的不同程序集版本中保留user.config设置?

Dav*_*vy8 134 .net settings assemblyversions

基本上问题是每次程序集版本更改(即用户安装新版本的应用程序)时,所有设置都会重置默认值(或者更准确地说,在具有不同版本的文件夹中创建新的user.config文件)号码作为名称)

升级版本时如何保持相同的设置,因为似乎不鼓励使用ini文件或注册表?

当我们使用Clickonce它似乎能够处理这个,所以它似乎应该能够完成,但我不知道如何.

Mar*_*son 225

ApplicationSettingsBase有一个名为Upgrade方法,它可以迁移先前版本的所有设置.

为了在发布应用程序的新版本时运行合并,您可以在设置文件中定义默认为true的布尔标志.将其命名为UpgradeRequired或类似名称.

然后,在应用程序启动时,检查标志是否已设置,如果是,请调用Upgrade方法,将标志设置为false并保存配置.

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

阅读有关MSDN上升级方法的更多信息.如果您需要进行一些自定义合并,GetPreviousVersion可能也值得一看.

  • 什么类型的设置应该**UpgradeRequired**?`appSettings`,`userSettings`或`applicationSettings`?作为Settings.Settings上的用户设置,一旦第一次将其更改为false,它将永远不再成立.新版本不会将**UpgradeRequired**重置为True. (4认同)
  • @dialex必须是用户设置.Application类型的设置是只读的.新版本号会导致设置重置,因为设置存储在特定于版本的路径中. (3认同)
  • 我想我回答了自己的问题.如果存在以前版本的设置文件,则每次应用程序启动时它都会将其值复制到最新版本,可能不是您想要的! (3认同)
  • 一个小问题,什么是新版本?4 零件号的任何部分?我使用 ClickOnce 那么这是一种不同的动物吗? (2认同)
  • 除了`UpgradeRequired`,我将应用程序的版本存储为设置,而不是/。这允许您执行自定义升级转换(即,将无效值/有效值转换为 - 最新版本的默认值 / - 相同值以外的值)。您可以拥有将每个需要转换的适用版本转换为需要它的下一个最低版本的代码,并将代码菊花链在一起,从而:a) 降低最新版本转换代码的复杂性,以及 b) 允许潜在地淘汰旧的转换代码。 (2认同)

小智 14

当我们每个版本只需要升级一次时,下一个简短的解决方案对我有用。它不需要额外的设置,例如UpgradeRequired

if (!ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).HasFile)
    Settings.Default.Upgrade();
Run Code Online (Sandbox Code Playgroud)