从以前版本的 app.config 文件自动“升级”用户设置?

Posted

技术标签:

【中文标题】从以前版本的 app.config 文件自动“升级”用户设置?【英文标题】:Automatically "upgrade" user settings from previous version of app.config file? 【发布时间】:2010-11-14 22:53:12 【问题描述】:

每次我编译我的应用程序并且版本号发生变化(我有一个自动递增的内部版本号)时,我都会丢失用户配置的 app.config 设置,因为它们存储在特定版本的 AppData 文件夹中。从本质上讲,就用户设置而言,我的应用程序的每个版本都是从头开始的。

虽然这在开发过程中是一个轻微的烦恼,但当我接近部署/发布时,它提出了一个问题 - 如果我使用 app.config 来存储我的用户设置,用户的个性化设置是否会在每次安装时被冲洗掉更改我的应用程序版本号的补丁? 如果是这样,是否有一种简单的方法可以从以前的版本“升级”设置?我知道在注册表中使用 HKCU 是另一种选择,但我喜欢 My.Settings 命名空间的易用性,我想继续使用 app.config。

Another SO question 提出了类似的问题,但答案似乎并不那么清楚。将我的 MSI 设置为要求用户升级是否足以保留这些用户级设置?

【问题讨论】:

【参考方案1】:

你看过ApplicationSettingsBase.Upgrade()吗?它允许使用以下调用从以前的版本升级设置:

My.Settings.Upgrade()

【讨论】:

这正是我正在寻找的行为 - 它获取设置的最新副本并加载它们。另外值得注意的是 ApplicationSettingsBase.GetPreviousVersion 方法,您可以使用该方法从以前的版本加载单个设置。谢谢!【参考方案2】:

不知道为什么,但升级命令或获取以前的版本似乎都不适合我。我可能做错了什么?我是否需要调用刷新命令之类的。我在表单加载时这样做,它应该是一个应用程序事件吗?

更新

找出原因,当您使用 4 位主要版本号时,它似乎不起作用。我使用 2012 年作为主要版本号。我已将其更改为 12,它就像一个魅力,虽然不是不符合千年标准。我还有 88 年才需要开始担心这个问题!

【讨论】:

【参考方案3】:

您是否考虑过 ClickOnce 部署?然后在in depth 中介绍该主题。 IMO,ClickOnce 对开发人员和用户来说都更容易。

【讨论】:

ClickOnce 非常棒,直到它不起作用,然后调试它几乎是不可能的。我们曾经使用它,并将其替换为我们自己的“启动器”类型的程序,因为有太多事情可能会出错,超出我们的控制范围,并且没有足够的日志记录,这让用户 sol。

以上是关于从以前版本的 app.config 文件自动“升级”用户设置?的主要内容,如果未能解决你的问题,请参考以下文章

服务引用更改时 app.config 不兼容

Windows 服务无法从 App.config 读取参数

如何将 app.config 文件添加到项目中

C# Windows 服务 - 从 ini 或 App.config 文件中读取

如何在 Visual Studio 中关闭 App.config 文件自动排列格式

为啥这个类库 dll 没有从 app.config 获取信息