我们知道 Visual Studio 有这个很棒的功能可以在发布时转换 Web.config。所以我们可以在 Web.Release.config 中使用类似下面的内容来替换 Web.config 中的原始值:
网络配置:
<add key="SomeKey" value="DebugValue"/>
Web.Release.config:
<add key="SomeKey" value="ReleaseValue" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
只要您在转换配置中没有错字,这一切都很好。因此,例如,如果您的转换配置中有以下行:
<add key="SomeKeyTypo" value="ReleaseValue" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
然后“SomeKey”项不会被替换,因为转换将找不到密钥,并且会静默打印此警告:
...\Web.Release.config: Warning : No element in the source document matches '/configuration/appSettings/add[@key='SomeKeyTypo']'
问题是,在某些情况下,例如,如果您更改主 Web.config 中的密钥而忘记在 Web.Release.config 中更改它,那么当您发布时,您很可能没有阅读发布输出消息并且您错过了警告,这可能会导致灾难,因为您的应用程序中将使用 Debug 值而不是 Release 值。
所以问题是,当您在 Web.Release.config 中定义转换时,是否有办法指示必须替换给定项目,如果找不到密钥,则抛出和 ERROR 而不是 WARNING并基本上以一些错误代码退出发布?