如何解决升级应用程序时迁移用户级别的自定义设置
| 我有一个使用自定义配置部分进行用户级设置的应用程序。这样做不是使用“设置”文件,而是可以将设置集中在该程序的单个app.config中,而不是像设置文件的默认设置那样每个项目都有一个。 问题是这些自定义设置是每个用户可配置的,并且在用户升级软件时丢失(创建用于新构建版本的新文件夹,并且不再使用旧文件夹)。因此,我需要一种在更新时或在升级后每位用户首次运行应用程序时迁移这些设置的方法。我已经看到了Settings.Upgrade()上的信息,但是它仅在配置的“设置文件”部分特别有效。我仔细阅读了ConfigurationSection的文档(我的自定义设置类/节从该文档派生),似乎没有任何帮助。使用ConfigurationManager从安装程序中提取用户设置以迁移它们似乎是死胡同,因为OpenExeConfiguration的重载不支持同时指定可执行文件和用户级别。 有什么提示吗?存储的信息不是关键(大多数时候记住窗口的几何形状和布局设置),但是每次升级应用程序时,丢失的信息都会很烦人。我唯一能想到的就是完全放弃这些设置的配置机制,并实现我自己的模型以将这些设置存储在用户AppData中与版本无关的文件中(我在其中存储了一些其他用户特定的文件) )。我希望这是最后的选择,因为您放弃了app.config包装器而损失了很多。解决方法
您可能想要创建对外部配置节文件的引用,该引用在更新期间保持原样。使用configSource属性引用文件。
这样,用户可以在app.config更新时保留其设置。
这是一篇相关的文章:如何为.NET中的“自定义配置”部分启用configSource属性?
, 这是一个古老的问题,但是我会写一个答案,以防有人通过Google来到这里。
我通过强制记忆先前版本的文件路径并用旧文件覆盖新配置位置中的文件来“解决”此问题。
我敢肯定这种方法有很多缺陷,但是如果您正在寻找一种可行的快速解决方案,那么您可能会发现它很有用。
if (Settings.Default.IsNewVersion)
{
Settings.Default.Upgrade();
var targetConfigPath = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
if (!string.IsNullOrWhiteSpace(Settings.Default.ConfigPath))
{
System.IO.File.Copy(Settings.Default.ConfigPath,targetConfigPath,true);
Settings.Default.Reload();
}
Settings.Default.ConfigPath = targetConfigPath;
Settings.Default.IsNewVersion = false;
Settings.Default.Save();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。