sti*_*ijn 6 msbuild projects-and-solutions visual-studio
我在命令行上使用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) -- 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)
Run Code Online (Sandbox Code Playgroud)
解
正如艾伦回答的那样,有什么工作是命名目标,AfterBuild因为这是msbuild的已知目标.但是,这需要在导入Microsoft.Cpp.targets之后定义目标,这有点容易出错,并且使得在构建之后定义要运行的多个目标变得更加困难.在研究这个时,我发现AfterTargets当不使用Build目标而是使用任何其他目标时,使用确实可以正常工作.不知道为什么,但它确实如此,我现在使用这个解决方案:
<Target Name="RunTargetAfterBuild" AfterTargets="FinalizeBuildStatus">
<Error Text="I am a failing target" />
</Target>
Run Code Online (Sandbox Code Playgroud)
将自定义目标添加到项目的 InitialTargets 属性中。
InitialTargets =“RunTargetAfterBuild”
您是对的,这不会解决您的问题。但是使用 AfterBuild Target 我能够重现并让 .sln 上的 msbuild 失败
| 归档时间: |
|
| 查看次数: |
4503 次 |
| 最近记录: |