【发布时间】:2013-02-20 13:51:39
【问题描述】:
我们知道 Visual Studio 有这个很棒的功能可以在发布时转换 Web.config。所以我们可以在 Web.Release.config 中使用类似下面的内容来替换 Web.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”项不会被替换,因为 transform 将找不到密钥并会静默打印此警告:
...\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 并且基本上以一些错误代码退出发布?
【问题讨论】:
标签: asp.net .net web-config web-config-transform