"最终目标"是 MSBuild 的目标

8
有没有一种方法可以在所有其他目标运行后运行特定的目标,无论它们成功还是失败?
与之相关的MsBuild中的try...finally只涉及少量目标。我需要处理整个包含数十个子构建的程序包的内容。
2个回答

3
也许如果你使用一个或多个CallTargets来包装顶层目标,那么你就可以使用一个<OnError .../>任务来运行最终的目标?
<Target Name="CompleteBuild">
  <CallTarget Targets="Target1"/>
  <CallTarget Targets="Target2"/>
  <CallTarget Targets="FinalTarget"/>

  <OnError ExecuteTargets="FinalTarget"/>
</Target>

1

这个问题没有直接的解决方法。通常在MSBuild中很难知道目标的实际顺序,只能知道相对顺序。你想用这个目标做什么?


1
这是我想要做的事情:修改 AssemblyVersion,完成所有构建,并在最后一步将 AssemblyVersion 恢复到原始状态。似乎没有很好的方法可以做到这一点。 - Roman Starkov
romkyns:我正在做完全相同的事情。要做到这一点,您需要在自己的csproj文件中覆盖CoreBuild目标,并添加一个额外的OnError属性来指定如果构建失败,则应运行AfterBuild目标。这样,AfterBuild目标将在每次构建时运行,无论成功还是失败。有关覆盖CoreBuild目标的信息,请参见https://dev59.com/f2435IYBdhLWcg3w6EqF#5169881。 - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接