WinForms项目发布版本升级时如何保留原有App.Config完整副本
版本升级时完整保留自定义App.config的可行方案
- 首先调整安装包的文件覆盖规则
打包应用安装包时,将App.config的覆盖策略设置为仅当目标路径不存在时才写入,主流打包工具(MSI、Inno Setup、Advanced Installer、ClickOnce)都支持该配置,从安装层面避免新版本直接覆盖用户本地已有的配置文件。 - 新增版本升级时的配置备份还原逻辑
程序启动时先比对当前程序集版本与上次记录的运行版本,检测到版本升级时:- 先将当前本地的App.config完整备份到用户目录下的应用专属路径,比如
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)\你的应用名称\下,该路径不会被安装包的更新操作修改 - 安装包更新完成后,新版本首次启动优先读取备份路径下的配置文件,替换安装目录下的默认新版App.config即可
- 先将当前本地的App.config完整备份到用户目录下的应用专属路径,比如
- 直接修改配置读取路径,完全规避安装目录覆盖问题
不用依赖安装目录下的默认App.config,通过ConfigurationManager直接指定用户目录下的自定义配置文件作为读取源,示例代码:
这种方案下,安装包带的默认App.config仅作为首次启动的初始模板,第一次启动就复制到用户目录,后续所有读写都操作用户目录下的副本,完全不会被版本升级的安装操作影响。ExeConfigurationFileMap configMap = new ExeConfigurationFileMap(); // 指定你放在用户目录下的配置文件路径 configMap.ExeConfigFilename = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "你的应用名称", "App.config"); Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None); // 之后直接从config对象读取自定义配置节即可
内容的提问来源于stack exchange,提问作者SaintRocker96
相关产品推荐
相关产品推荐

