Msbuild 我如何启用";“将警告视为错误”;对于我的TransformXml任务?

Msbuild 我如何启用";“将警告视为错误”;对于我的TransformXml任务?,msbuild,web-config-transform,config-transformation,Msbuild,Web Config Transform,Config Transformation,我正在使用以下(高度简化的)MSBuild脚本: <?xml version="1.0"?> <Project DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\Vis

我正在使用以下(高度简化的)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>
不幸的是,这些都不起作用;警告将继续发送。基于这一点,我猜测尊重TreatWarningAsErrors指令取决于单个MSBuild任务,在本例中,TransformXml没有

如果我能找到一种方法来了解上一个任务是否抛出了警告,例如,我可以做如下操作:

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

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

处理警告错误

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

代码分析处理警告ASERRORS

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


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

是的,我想这就是我必须要做的。我刚刚用Powershell包装了对构建任务的调用,每当我看到令牌
:warning:
-到目前为止似乎工作得很好时,我就会抛出一个异常。这并不理想,但总比什么都不理想好。您可以创建一个包装器自定义MSBuild任务来创建和执行TransformXml任务,如果记录了任何警告,请将其作为错误重新记录。反编译TransformXml类并查看是否有任何方法可以将警告视为错误(特别是如果它来自ToolTask)。是的,这就是我最终采用的方法-我将其包装在Powershell脚本中。您的方式当然“更干净”,在我的部署脚本的未来版本中,我可能会很好地实现这一点。
C:\MyApp\DevOps>msbuild /p:TreatWarningsAsErrors="true" ConfigBundle.msbuild
<Message Text="##teamcity[message text='Config Transform Failed!' status='ERROR']" Condition="$WarningOccurred == 'true'" />