背景
我有一个用C#编写的简单WinForms应用程序。我讨论了一段时间的部署解决方案,但最终决定放弃ClickOnce,因为一些约束是至关重要的限制。
相反,我采用了一种简单的解决方案,即通过程序集/文件版本对应用程序进行版本控制(我使它们保持同步)。我正在通过安装项目进行部署(*.msi)。我将最新的程序集版本号以及最新的安装程序文件联机存储在一个XML文件中。在运行时,我只是根据最新的在线版本检查Application.ProductVersion,如果有可用的更新,则打开更新对话框。
问题
到目前为止,这种方法运行得很好,但我最近注意到了这种方法的一个主要问题。当应用程序的程序集版本更新时,会在AppData/Company/Product/Version/blahblah中创建一个新版本的用户设置文件(user.config)。这显然会迫使用户重置新版本中的所有内容。
建议的解决方案
我不知道该怎么做。到目前为止,这个应用程序只有一个版本,目前的用户群基本上是我可以乞求谁来测试它,所以切换策略没有什么大不了的。我考虑过:
1.)编写我自己的设置系统,从而完全控制设置文件的存储和使用位置/方式。
2.)重新考虑我的版本控制/更新策略,以便更新不基于程序集版本。我不确定我将如何做到这一点,但我的测试似乎表明,即使使用相同的程序集版本构建和安装新版本,也仍然会破坏user. config。
我想我真正想问的是,是否有任何方法可以保留默认设置系统,因为它很容易使用,同时也适应我的部署策略。
3条答案
按热度按时间dgenwo3n1#
使用内置的设置类,您只需在更改应用程序版本时升级设置即可。具体操作如下:在Settings.settings文件中,创建一个新的设置UpdateSettings type=bool Scope=User Value=True
在使用任何设置之前包含以下代码(它可以在每次应用运行时运行,因为这也使在调试器中运行更容易)
当您的新应用程序版本执行时,UpdateSettings的预设值为True,而且不会使用任何旧设定。如果UpdateSettings为True,我们会从旧设定升级设定,然后保存在新的应用程序版本下。
fjnneemd2#
我是这么解决的。
在GUI应用程序中,通过执行
然而,我一直有一个问题,当安装了新版本时,所有其他库都会丢失它们的设置。通过下面的实现,软件将运行AppDomain的所有程序集,并恢复相应库的设置:
我已经在GUI项目的App.xaml.cs中实现了该代码,当新版本将“NewVersionInstalled”设置为true时,它将始终执行。
希望这对你有帮助!
roqulrg33#
我更喜欢这种不需要额外设置
Settings.Default.UpdateSettings
的替代方案