我使用在命令行上的MSBuild建立包含一个C ++项目VS2012溶液。 该项目有生成后运行一个目标:
<Target Name="RunTargetAfterBuild" AfterTargets="Build">
<Error Text="I am a failing target" />
</Target>
我想在构建时在建设过程中的MSBuild返回一个错误,但是某个地方,错误已被丢失的MSBuild报告“构建成功”。 因此,该ERRORLEVEL仍设置为0,这是相当难以察觉,一旦发生过程中自动构建错误。 如何让我的MSBuild传播这个错误一直到顶层的项目/解决方案? 我知道这是可能的,因为它是编译器错误和喜欢会发生什么。
以下是输出的相关部分:
> msbuild test.sln
...
...: error : I am a failing target [...test.vcxproj]
Done Building Project "...test.vcxproj" (default targets) -- FAILED.
Done Building Project "...test.vcxproj.metaproj" (default targets).
Done Building Project "...test.sln" (Build target(s)).
Build succeeded. --> this is NOT what I want
....
0 Warning(s)
1 Error(s)
虽然编译器错误输出是这样的:
> msbuild test.sln
....
...: error C3861: 'HECK': identifier not found [...test.vcxproj]
Done Building Project "...test.vcxproj" (default targets) -- FAILED.
Done Building Project "...test.vcxproj.metaproj" (default targets) -- FAILED.
Done Building Project "....test.sln" (Build target(s)) -- FAILED.
Build FAILED. --> this is what I want
0 Warning(s)
1 Error(s)
解
艾伦回答,什么是作品命名目标AfterBuild
,因为这是一个已知目标的MSBuild。 然而,需要目标被导入Microsoft.Cpp.targets这是有点容易出错之后定义,并就更难定义多个目标的生成后运行。 虽然研究这个我发现,使用AfterTargets
不使用时,如预期那样工作, Build
目标,但任何其他的目标。 不知道为什么,但它这样做,现在我用这个方法,而不是:
<Target Name="RunTargetAfterBuild" AfterTargets="FinalizeBuildStatus">
<Error Text="I am a failing target" />
</Target>