背景
我有一个用 C# 编写的简单 WinForms 应用程序。我对部署解决方案争论了一段时间,但最终决定放弃 ClickOnce,因为一些限制非常严格。
相反,我采用了一个简单的解决方案,即通过应用程序属性中的程序集/文件版本(我使它们保持同步)对应用程序进行版本控制。我正在通过安装项目 (*.msi) 进行部署。我将最新的程序集版本号以及最新的安装程序文件在线存储在一个 XML 文件中。在运行时,我只需根据在线最新版本检查 Application.ProductVersion,如果有可用更新,则打开更新对话框。
问题
到目前为止,这种方法运行良好,但我最近注意到这种方法存在一个主要问题。当更新应用程序的程序集版本时,将在 AppData/Company/Product/Version/blahblahblah 中创建新版本的用户设置文件 (user.config)。这显然会迫使用户在新版本中重置所有内容。
建议的解决方案
我不确定如何进行。该应用程序到目前为止只有 1 个版本,目前的用户群基本上是我可以请求测试它的任何人,所以切换策略没什么大不了的。我考虑过:
1.) 编写我自己的设置系统,从而完全控制设置文件的存储和使用位置/方式。
2.) 重新考虑我的版本控制/更新策略,以便更新不基于程序集版本。我不确定该怎么做,但我的测试似乎表明即使使用相同的程序集版本构建和安装新版本仍会破坏 user.config。
我想我真正想问的是,是否有任何方法可以保留默认设置系统,因为它非常易于使用,同时还可以根据我的部署策略进行调整。
最佳答案
使用内置的设置类,您只需在更改应用程序版本时随时升级设置。方法如下: 在 Settings.settings 文件中,创建一个新设置 UpdateSettings type=bool Scope=User Value=True
在使用任何设置之前包括以下代码(它可以在每次应用程序运行时运行,因为这也使得在调试器中运行更容易)
// Copy user settings from previous application version if necessary
if (MyApp.Properties.Settings.Default.UpdateSettings)
{
MyApp.Properties.Settings.Default.Upgrade();
MyApp.Properties.Settings.Default.UpdateSettings = false;
MyApp.Properties.Settings.Default.Save();
}
当您的新应用程序版本运行时,UpdateSettings 将具有默认值 True,并且不会使用您的任何旧设置。如果 UpdateSettings 为真,我们会从旧设置升级设置,然后保存在新的应用程序版本下。
关于c# - 更改程序集/文件版本后保留用户设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924183/