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

Sak*_*o73 29 msbuild visual-studio-2010 visual-studio

谁能解释这些之间的差异:

<Target Name="AfterBuild">
    <!-- task here -->
</Target>
Run Code Online (Sandbox Code Playgroud)

和:

<PropertyGroup>
<PostBuildEvent>copy "$(ProjectDir)\..\lib\$(PlatformName)\x.dll" .</PostBuildEvent>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

谢谢.

Jar*_*Par 19

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

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

  • 具体取决于您的情况,但通常人们会使用PostBuildEvent (2认同)

Bri*_*ler 18

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

<Target Name="PostBuildEvent">
   <Exec Command="$(PostBuildEvent)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

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

AfterBuild目标能够包含任意MSBuild任务,包括一个或多个Exec任务或MSBuild可用的任何其他任务,这允许更高的复杂性.

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

  • 好吧,从技术上讲,PostBuildEvent运行在CoreBuild依赖目标的末尾,这些目标都在CoreBuild目标运行之前执行,但是CoreBuild只是一个空目标,它似乎只作为其DependsOn目标列表的连接点存在.它不会在"CoreBuild之后"运行,只是在CoreBuild导致运行的所有内容的末尾.请参阅Microsoft.Common.targets~line 560(2010 SP1). (2认同)