如何为我的 TransformXml 任务启用“将警告视为错误”?

2024-06-20

我正在使用以下(高度简化的)MSBuild 脚本:

<?xml version="1.0"?>
<Project DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"  />

    <Target Name="Transform">       
        <TransformXml Source="../web.config"
            Transform="Config\Production\webapp.xml"
            Destination="Config\Build\Production\web.config" />
    </Target>
</Project>

这非常适合转换单个配置文件,而无需通过 MSDeploy。

然而,假设在我的变换中我拼错了一个变量。我会收到警告:

C:\MyApp\DevOps\Config\Production\webapp.xml(15,6): warning : 源文档中没有元素与 '/configuration/appSettings/add[@key='MyUnknownVariable']'[C:\MyApp \DevOps\ConfigBundle.msbuild]

虽然很高兴我们收到此警告,但我确实希望这是一个错误,因为这将成为我们自动化构建和部署过程的一部分,因此在应用程序停止工作之前不太可能有人发现它。

我想要一种将这些警告视为错误的方法。根据我在互联网上看到的一些内容,我尝试了具有两个不同的 TreatWarningsAsErrors 符号的 PropertyGroup:

<PropertyGroup>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>

我尝试在命令行上设置它(我怀疑与上面的相同):

C:\MyApp\DevOps>msbuild /p:TreatWarningsAsErrors="true" ConfigBundle.msbuild

不幸的是,这些都不起作用;警告继续发送。基于此,我猜测这取决于单个 MSBuild 任务是否尊重 TreatWarningsAsErrors 指令,而在本例中,TransformXml 则不尊重。

如果我能找到一种方法来了解最后一个任务是否发出警告,例如我可以这样做:

<Message Text="##teamcity[message text='Config Transform Failed!' status='ERROR']" Condition="$WarningOccurred == 'true'" />

它并不完全完美,但这肯定会阻止构建成功完成。希望有人能对此提出有用的建议。


将警告视为错误

用于指示不同语言编译器将警告视为错误

代码分析将警告视为错误

用于指示代码分析将警告视为错误。

没有将所有 MsBuild 警告视为错误的常规开关。通常,MsBuild 的调用者会将记录器传递给 MsBuild 以检测是否发生警告,例如,Team Build 就是这样做的。然后调用工具可以使整体构建结果通过或失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为我的 TransformXml 任务启用“将警告视为错误”? 的相关文章

随机推荐