.NET Windows桌面软件如何向客户站点推送binding redirects且不覆盖站点特有配置
.NET桌面应用.exe.config绑定重定向更新方案解答
问题1:是否必须修改客户机上的物理配置文件?
不需要强制修改物理.config文件,有两种官方支持的方案可以规避物理文件修改:
- 运行时动态处理:在应用启动入口注册
AppDomain.AssemblyResolve事件,监听程序集加载失败的请求,直接返回对应版本的已部署程序集,完全不依赖配置文件中的绑定重定向规则,无需改动客户机任何本地文件。 - 配置节点拆分:在项目的app.config中给
<runtime>节点添加configSource属性,将绑定重定向相关配置拆分到独立的runtime.config文件中,站点特有配置保留在主.exe.config文件内,版本更新时直接替换独立的runtime.config文件即可,不会触碰用户自定义配置。
Visual Studio本身仅支持打包发布阶段自动生成绑定重定向规则,没有提供客户端运行时免修改配置的原生能力,上述两种方案均为.NET运行时原生支持的实现方式。
问题2:如果必须修改物理文件,是否有现成工具支持?
如果场景要求必须修改客户机本地的.exe.config主文件,不需要完全自行实现XElement节点操作:
- 可以直接使用微软官方的XML文档转换(XDT)能力,提前编写绑定重定向的更新规则.xdt文件,调用
Microsoft.Web.XmlTransform库执行配置转换,工具会自动新增/更新<assemblyBinding>下的重定向节点,不会修改用户自定义的其他配置内容,是目前最常用的配置增量更新方案。 - 如果你不想引入额外依赖,用.NET自带的
System.Configuration命名空间下的配置操作API,或者自行操作XElement更新指定节点也是常规可行方案,实现逻辑较为简单,操作前做好原配置文件备份即可。
内容的提问来源于stack exchange,提问作者paulipopsis
相关产品推荐
相关产品推荐

