我对 web.config 文件中的各种动态部分使用外部配置文件。基本上环境(Prod、UAT、Test、Dev 等)之间的所有动态变量都已外部化为通用命名的 .config 文件。
我的 web.config 也是通用的,因此所有环境都使用相同的 web.config(因为连接字符串等内容在外部文件中)。所有文件在不同环境中的名称都相同,因此当我们发布时,我们只需要在发布期间保持 web.config 和 \Configs* 目录完好无损。
我想要做的(通过 XSLT 或 PowerShell 之类的东西)是将这些外部 *.config 文件中包含的所有信息合并回 web.config,以便我可以将(现在合并的)web.config 与版本进行比较开发商提供。
所以我们现在的 web.config 可能会说:
<sessionState configSource="Configs\System.Web.SessionStateConnectionString.config" />
在 Prod 环境的 System.Web.SessionStateConnectionString.config 文件中有:
<sessionState mode="StateServer" cookieless="true" timeout="20"/>
并且对于测试环境有:
<sessionState mode="InProc" cookieless="true" timeout="20"/>
我想将所有外部 *.config 文件合并回 web.config 以便该文件基本上完成,就好像从未使用过 configSource 一样。这将允许我对 web.config 文件(在它被合并回来之后)以及开发人员提供给我们的内容执行 diff 或 WinMerge,显示哪些内容已更改,例如添加的新密钥或使用的新模块。
解决这个问题的最佳方法是什么?