【问题标题】:How to force replace an element using config transform in Visual Studio?如何在 Visual Studio 中使用配置转换强制替换元素?
【发布时间】: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


    【解决方案1】:

    您可以将 Visual Studio 选项设置为“将警告视为错误”,这会引发错误,阻止发布任务完成。您甚至可以将其配置为仅将此特定警告视为错误。

    您可以通过转到要部署的项目的属性页面找到该对话框,然后在靠近底部的“构建”下找到您的选项。

    【讨论】:

    • 这看起来是一个有趣的解决方法,但令人惊讶的是,它似乎不适用于转换警告!我将所有警告设置为具有转换的 Web 项目的错误,但它仍将它们视为黄色警告。它适用于其他类型的警告,例如当您声明变量但不使用它时,它完全忽略了转换警告!知道为什么吗?也许它只适用于编译警告!?
    • 前几天我开始研究这个,并认为 PostBuild 步骤可能是要走的路。我可能会在今天晚些时候四处寻找这样的解决方案并将结果发回。可能不像只关注部署输出那么简单..
    • 如果您能分享您的发现,那就太好了:>
    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 2018-05-16
    • 2020-01-07
    • 2014-04-28
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多