Visual Studio项目文件PostBuildEvent和AfterBuild目标之间的区别?

时间:2011-05-25 17:42:16

标签: visual-studio visual-studio-2010 msbuild

有人可以解释这些之间的差异:

<Target Name="AfterBuild">
    <!-- task here -->
</Target>

<PropertyGroup>
<PostBuildEvent>copy "$(ProjectDir)\..\lib\$(PlatformName)\x.dll" .</PostBuildEvent>
</PropertyGroup>

谢谢。

2 个答案:

答案 0 :(得分:18)

PostBuildEvent和AfterBuild都是MSBuild目标。两者之间的区别在于调用它们的条件

  • AfterBuild:它作为Build目标中的最后一个操作运行,无论构建是否成功,都会这样做。它运行在PostBuildEvent之后(如果它完全运行)
  • PostBuildEvent:这在构建完成后有条件地运行。它运行时是非常可配置的,但一般来说只有在构建成功完成并产生新输出时才会运行。

答案 1 :(得分:17)

PostBuildEvent属性能够保存作为Command属性传递给Exec任务的命令。基本上你最终会得到一个看起来像这样的目标,

<Target Name="PostBuildEvent">
   <Exec Command="$(PostBuildEvent)" />
</Target>

您可以配置使用IDE中的设置运行此条件的条件,默认情况下它仅在成功构建时运行。

AfterBuild目标能够包含任意MSBuild任务,包括一个或多个Exec任务或MSBuild可用的任何其他任务,这样可以提高复杂性。

就执行时而言,PostBuildEvent目标在“CoreBuild”之前运行,而“AfterBuild”目标在“CoreBuild”之后运行。如果放置很关键,您可以使用$(DependsOn ..)声明或在新目标上指定BeforeTargets和AfterTargets来制作自己的目标并将其连接到需要运行的构建中。