AfterTarget未在AfterBuild中触发

时间:2014-04-13 11:05:04

标签: msbuild

在我的项目中,我希望在AfterBuild之后运行ILMerge目标,所以我做了以下事情:

  <Target Name="AfterBuild" AfterTargets="ILMerge" >
     <Message Importance="High" Text="AfterBuild"></Message>
  </Target>
  <Target Name="ILMerge">
   <Message Text="IlMerging" Importance="High" />
  </Target>

但是&#34; IlMerging&#34;不显示文本,这意味着AfterBuild中的AfterTargets未被触发。

为什么?

2 个答案:

答案 0 :(得分:8)

如果您想在ILMerge目标之后运行AfterBuild目标,那么您应该编写脚本。

  <Target Name="AfterBuild" >
     <Message Importance="High" Text="AfterBuild"></Message>
  </Target>
  <Target Name="ILMerge" AfterTargets="AfterBuild">
   <Message Text="IlMerging" Importance="High" />
  </Target>

输出:

AfterBuild: AfterBuild

ILMerge: ILMerge

如果Target AfterBuild应该在ILMerge目标之后运行,那么您需要将AfterBuild目标更改为KMoraz建议的目标。

  <Target Name="AfterBuild" DependsOnTargets="ILMerge" >
     <Message Importance="High" Text="AfterBuild"></Message>
  </Target>
  <Target Name="ILMerge" >
   <Message Text="IlMerging" Importance="High" />
  </Target>

输出:

ILMerge: ILMerge

AfterBuild: AfterBuild

两个脚本都使用命令行

msbuild testtarget.xml / t:AfterBuild

答案 1 :(得分:2)

请参阅What is the difference between 'DependsOnTargets' and 'AfterTargets'?

在您的情况下使用DependsOnTargets,因为您的目标没有为执行链定义BeforeTargets

<Target Name="AfterBuild" DependsOnTargets="ILMerge" >