我在命令行上使用msbuild来构建包含C++项目的VS2012解决方案.该项目有一个在构建之后运行的目标:
<Target Name="RunTargetAfterBuild" AfterTargets="Build">
<Error Text="I am a failing target" />
</Target>
Run Code Online (Sandbox Code Playgroud)
我希望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)
Run Code Online (Sandbox Code Playgroud)
对于编译器错误,输出是这样的:
> msbuild test.sln
....
...: error C3861: 'HECK': identifier not found [...test.vcxproj]
Done Building Project "...test.vcxproj" (default targets) …Run Code Online (Sandbox Code Playgroud)