生成失败后运行MSBuild目标

生成失败后运行MSBuild目标,msbuild,Msbuild,我的自定义MSBuild任务在实际生成之前和之后执行一些步骤。务必始终执行生成后的步骤来清理某些文件。我目前确定了两个目标: <Target Name="NrtPatchAssemblyInfo" BeforeTargets="BeforeBuild"> 及 第一个始终执行,但第二个仅在成功构建后运行。如果编译器生成失败,例如由于代码文件中的语法错误,则第二个目标不会运行 我可以做些什么来改变这一点,并始终执行第二个任务 我找不到MSBuild通常使用的目标名称列表。这些名

我的自定义MSBuild任务在实际生成之前和之后执行一些步骤。务必始终执行生成后的步骤来清理某些文件。我目前确定了两个目标:

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


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

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


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

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



要确定执行了哪些目标,只需详细地运行构建。

当一个目标失败时,没有更多的目标吗?然后,我如何进行清理工作或在发生错误后需要执行的任何操作?复制Visual Studio基础结构对我来说还不是一个选项。你也可以不需要进行清理工作:更容易修复imo。复制你想要修补程序集信息的任何文件,将其复制到中间目录,然后在生成中使用该副本。对副本所做的更改是否不恢复并不重要。我终于回到了这个话题。我已将工具更改为不在适当位置修补和恢复文件,而是将修改后的文件保存到obj\并使用该文件(包括)而不是原始文件(删除)。
<Target Name="NrtRestoreAssemblyInfo" AfterTargets="AfterBuild">
<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>