首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将警告视为自定义生成的错误?

如何将警告视为自定义生成的错误?
EN

Stack Overflow用户
提问于 2016-05-27 07:58:41
回答 1查看 983关注 0票数 0

作为构建的一部分,我们有一个项目(.vcxproj),它只包含一个带有Custom Build Tool构建的python脚本,命令行:$(python_bin)/python.exe %(FullPath)。Msbuild能够解析来自这个python脚本的警告,并在生成后显示它们:

代码语言:javascript
复制
"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将这些警告视为错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-27 10:48:14

让我从你最近的一个评论开始:

..。msbuild将python脚本的输出识别为警告。但也可以是bash、perl、php脚本或类似的东西。msbuild将输出识别为警告,我希望将这些警告视为错误。..。

对于MSBuild中可以想象的任何工具,都没有通用的“将警告转换为错误”。怎么可能呢?MSBuild调用的每一个工具都有一种方法,如果有的话。例如,C++编译器和C#编译器具有特定的命令行选项,这些选项由这些语言的msbuild文件包含在它们的命令行中--核心msbuild无法做到这一点。

因此,您需要做的是指示工具(问题上下文中的python)在您想要的时候这样做。您可以使用现有的/众所周知的属性(TreatWarningsAsErrors)作为触发器来实现这一点。如果它有一定的值(true),那么您需要做任何您需要做的事情,使您的工具以错误的形式发出警告并采取相应的行动。

示例:

代码语言:javascript
复制
<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此处)。

有点像

代码语言:javascript
复制
 <PropertyGroup>
     <ErrorExp>.*: error :.*</ErrorExp>
     <ErrorExp Condition="'$(TreatWarningsAsErrors)' == 'true'">.*: (warning|error) :.*</ErrorExp>
 </PropertyGroup>

 <Exec ... CustomErrorRegularExpression="$(ErrorExp)"/>

(未经测试!)该让你开始了。

但是,由于Python已经提供了一种将警告设置为错误的方法(似乎是通过-W error ),因此该选项似乎不必要地复杂。

同样,关于您对可能使用的其他工具的评论,请记住,上述方法还需要对其他工具以及它们如何格式化警告(如果有的话)有具体的了解,因为您需要对它们进行自定义正则表达式。

因此,即使是这种方法,也需要有关您调用的工具的特定知识,而不需要太多的msbuild。

我可能会完全离开这里,你真的有一个不同的问题,问题或需要。检查对你的问题的评论,似乎我不是唯一一个,因此,你可能需要改变你的问题或使它更精确(可能的例子,你已经尝试过),以获得进一步/更好的帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37477969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档