“DependsOnTargets"和“AfterTargets"有什么区别? [英] What is the difference between 'DependsOnTargets' and 'AfterTargets'?

查看:17
本文介绍了“DependsOnTargets"和“AfterTargets"有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

DependsOnTargetsAfterTargets 有什么区别?这两个我分不清.

What is the difference between DependsOnTargets and AfterTargets? I can not distinguish these two.

推荐答案

DependsOnTargets

定义必须在目标可以执行之前执行的目标.

DependsOnTargets

Defines the targets that must be executed before the target can be executed.

<Target Name="DependsOn" DependsOnTargets="DependencyTarget1;DependencyTarget2">
  <Message Text="Target : DependsOn"/>
</Target>

<Target Name="DependencyTarget2">
  <Message Text="Target : DependencyTarget2"/>
</Target> 

<Target Name="DependencyTarget1">
  <Message Text="Target : DependencyTarget1"/>
</Target> 

Output
> Target : DependencyTarget1
> Target : DependencyTarget2
> Target : DependsOn

BeforeTargets 和 AfterTargets(仅在 MSBuild 4 中可用)

表示目标应该在指定的一个或多个目标之前或之后运行.

<Target Name="BeforeAndAfter">
  <Message Text="Target : BeforeAndAfter"/>
</Target>

<!-- BeforeTarget1 will run BEFORE target "BeforeAndAfter" -->
<Target Name="BeforeTarget" BeforeTargets="BeforeAndAfter">
  <Message Text="BeforeTarget run before : BeforeAndAfter"/>
</Target> 

<!-- BeforeTarget1 will run AFTER target "BeforeAndAfter" -->
<Target Name="AfterTarget" AfterTargets="BeforeAndAfter">
  <Message Text="AfterTarget run after : BeforeAndAfter"/>
</Target> 

Output
> BeforeTarget run before : BeforeAndAfter
> Target : BeforeAndAfter
> AfterTarget run after : BeforeAndAfter

  • 如果您有多个目标应该在同一个指定目标之前或之后运行,它们将按声明顺序执行:

    <Target Name="BeforeAndAfter">
      <Message Text="Target : BeforeAndAfter"/>
    </Target>
    
    <!-- 
       BOTH BeforeTarget1 and BeforeTarget2 should run before target "BeforeAndAfter"
    -->
    <Target Name="BeforeTarget1" BeforeTargets="BeforeAndAfter">
      <Message Text="BeforeTarget1 run before : BeforeAndAfter"/>
    </Target> 
    
    <Target Name="BeforeTarget2" BeforeTargets="BeforeAndAfter">
      <Message Text="BeforeTarget2 run before : BeforeAndAfter"/>
    </Target> 
    

  • BeforeTargetsAfterTargets 可用于扩展现有构建过程.

    例如,使用此属性,您可以轻松地在 CoreCompile 之前执行目标(在 Microsoft.CSharp.targets 中定义).否则,您将不得不覆盖属性 CoreCompileDependsOn.

    For example, with this attributes you can easily execute a target before CoreCompile (defines in Microsoft.CSharp.targets). Without that you'll have to override the property CoreCompileDependsOn.

    如果没有 AfterTargets,如果没有定义扩展点(CallTarget 在目标末尾具有您指定的属性),您将无法轻松地在另一个目标之后执行目标可以覆盖)

    Without AfterTargets you have no way to easily execute a target after another one if no extension point is defined (CallTarget at the end of the target with a property that you can override)

    DependsOnTargetsBeforeTargetsAfterTargets在同一个target上使用时,执行顺序为:

    When DependsOnTargets, BeforeTargets and AfterTargets are used on the same target, the order of execution is :

    • DependsOnTargets
    • BeforeTargets
    • 目标
    • AfterTargets

    <Target Name="MainTarget" DependsOnTargets="DefaultDependsOn">
      <Message Text="Target : MainTarget"/>
    </Target>
    
    <Target Name="DefaultDependsOn">
      <Message Text="Target : DefaultDependsOn"/>
    </Target>
    
    <Target Name="DefaultBeforeTarget" BeforeTargets="MainTarget">
      <Message Text="Target : DefaultBeforeTarget"/>
    </Target>
    
    <Target Name="DefaultAfterTarget" AfterTargets="MainTarget">
      <Message Text="Target : DefaultAfterTarget"/>
    </Target> 
    
    Output
    > Target : DefaultDependsOn
    > Target : DefaultBeforeTarget
    > Target : MainTarget
    > Target : DefaultAfterTarget
    

    这篇关于“DependsOnTargets"和“AfterTargets"有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆