gpt4 book ai didi

visual-studio - 当目标在 VS 解决方案中失败时,如何使 msbuild 失败?

转载 作者:行者123 更新时间:2023-12-04 15:24:27 25 4
gpt4 key购买 nike

我在命令行上使用 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>

最佳答案

您可以扩展 BuildDependsOn 属性,将您的目标作为成功构建的一部分:

<PropertyGroup>
<BuildDependsOn>
$(BuildDependsOn);
RunTargetAfterBuild
</BuildDependsOn>
</PropertyGroup>

更多详情可在这找到:
http://msdn.microsoft.com/en-us/library/ms366724.aspx

关于visual-studio - 当目标在 VS 解决方案中失败时,如何使 msbuild 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14376357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com