gpt4 book ai didi

msbuild - 构建失败后运行 MSBuild 目标

转载 作者:行者123 更新时间:2023-12-02 21:25:38 26 4
gpt4 key购买 nike

我的自定义 MSBuild 任务在实际构建之前和之后执行一些步骤。始终执行构建后的步骤来清理一些文件是至关重要的。我目前定义了两个目标:

<Target Name="NrtPatchAssemblyInfo" BeforeTargets="BeforeBuild">

<Target Name="NrtRestoreAssemblyInfo" AfterTargets="AfterBuild">

第一个总是执行,但第二个仅在成功构建后运行。如果编译器构建失败(例如由于代码文件中的语法错误),则不会运行第二个目标。

我可以做什么来改变这个并始终执行第二个任务?

我找不到 MSBuild 通常使用的目标名称列表。这些名称只是从其他来源复制的。

最佳答案

发生错误时,MsBuild 将停止运行任何其他目标(除非在某处修改了ContinueOnError,但您无法编辑所有已安装的 msbuild 文件以使其正常工作)。一种解决方案是使用 OnError元素。这必须在失败的目标(或者我认为该目标的父目标)上设置,因此您必须选择在实际构建中使用的目标并覆盖它。对于 C++ 构建,您需要覆盖构建目标,从 Microsoft.Common.CurrentVersion.targets 复制定义并添加 OnError。示例代码(必须在 Microsoft.Cpp.targets 导入后插入到项目文件中!):

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Target Name="RunOnError">
<Message Text="OOPS!" />
</Target>
<Target
Name="Build"
Condition="'$(_InvalidConfigurationWarning)' != 'true'"
DependsOnTargets="$(BuildDependsOn)"
Returns="$(TargetPath)">
<OnError ExecuteTargets="RunTargetAfterBuild" />
</Target>

要确定执行哪些目标,只需以详细的详细程度运行构建即可。

关于msbuild - 构建失败后运行 MSBuild 目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45978763/

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