作为构建的一部分,我们有一个项目(.vcxproj),它只包含一个带有Custom Build Tool构建的python脚本,命令行:$(python_bin)/python.exe %(FullPath)。Msbuild能够解析来自这个python脚本的警告,并在生成后显示它们:
"F:\Generators.vcxproj" (default target) (1) ->
(CustomBuild target) ->
F:\Tool.py(274): warning : OPSEC [F:\Generators.vcxproj]
F:\Tool.py(274): warning : OPSEC [F:\Generators.vcxproj]
2 Warning(s)
0 Error(s)现在,我如何才能强迫它将这些警告视为错误呢?我找到的唯一选项是Treat Linker Warning As Errors,它显然没有帮助,因为这个项目上的链接没有完成(因为它只是一个带有自定义构建的.py文件),无论如何,这些警告来自构建步骤。
我甚至尝试将<TreatWarningAsError>true</TreatWarningAsError>添加到ClCompile部分。帮不上忙。
如何强制msbuild将这些警告视为错误?
发布于 2016-05-27 10:48:14
让我从你最近的一个评论开始:
..。msbuild将python脚本的输出识别为警告。但也可以是bash、perl、php脚本或类似的东西。msbuild将输出识别为警告,我希望将这些警告视为错误。..。
对于MSBuild中可以想象的任何工具,都没有通用的“将警告转换为错误”。怎么可能呢?MSBuild调用的每一个工具都有一种方法,如果有的话。例如,C++编译器和C#编译器具有特定的命令行选项,这些选项由这些语言的msbuild文件包含在它们的命令行中--核心msbuild无法做到这一点。
因此,您需要做的是指示工具(问题上下文中的python)在您想要的时候这样做。您可以使用现有的/众所周知的属性(TreatWarningsAsErrors)作为触发器来实现这一点。如果它有一定的值(true),那么您需要做任何您需要做的事情,使您的工具以错误的形式发出警告并采取相应的行动。
示例:
<PropertyGroup>
<PythonCmd>$(python_bin)\python.exe</PythonCmd>
<PythonCmd Condition="'$(TreatWarningsAsErrors)' == 'true'">$(PythonCmd) -W error</PythonCmd>
<PythonCmd>$(PythonCmd) %(FullPath)</PythonCmd>
</PropertyGroup>
<Exec Command="$(PythonCmd)" .../>现在,如果您不知道如何让python做您想做的事情(将警告转换为错误),那么就没有任何msbuild魔法可以帮助您做到这一点。你突然有了一个关于蟒蛇的问题。因为您现在遇到的实际问题与从msbuild或命令行执行python无关。
第二种选择:如果您不能或不希望使用Python内置的将警告转换为错误的功能,也可以使用Exec-Tasks CustomErrorRegularExpression(https://msdn.microsoft.com/en-us/library/microsoft.build.tasks.exec.customerrorregularexpression(v=vs.90%29.aspx)-property来指定一个正则表达式,该工具应该将其作为“错误输出”处理(python.exe此处)。
有点像
<PropertyGroup>
<ErrorExp>.*: error :.*</ErrorExp>
<ErrorExp Condition="'$(TreatWarningsAsErrors)' == 'true'">.*: (warning|error) :.*</ErrorExp>
</PropertyGroup>
<Exec ... CustomErrorRegularExpression="$(ErrorExp)"/>(未经测试!)该让你开始了。
但是,由于Python已经提供了一种将警告设置为错误的方法(似乎是通过-W error ),因此该选项似乎不必要地复杂。
同样,关于您对可能使用的其他工具的评论,请记住,上述方法还需要对其他工具以及它们如何格式化警告(如果有的话)有具体的了解,因为您需要对它们进行自定义正则表达式。
因此,即使是这种方法,也需要有关您调用的工具的特定知识,而不需要太多的msbuild。
我可能会完全离开这里,你真的有一个不同的问题,问题或需要。检查对你的问题的评论,似乎我不是唯一一个,因此,你可能需要改变你的问题或使它更精确(可能的例子,你已经尝试过),以获得进一步/更好的帮助。
https://stackoverflow.com/questions/37477969
复制相似问题