构建失败后运行 MSBuild 目标

ygo*_*goe 5 msbuild

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

<Target Name="NrtPatchAssemblyInfo" BeforeTargets="BeforeBuild">
Run Code Online (Sandbox Code Playgroud)

<Target Name="NrtRestoreAssemblyInfo" AfterTargets="AfterBuild">
Run Code Online (Sandbox Code Playgroud)

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

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

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

sti*_*ijn 4

当发生错误时,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>
Run Code Online (Sandbox Code Playgroud)

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