设置属性值的问题

时间:2010-03-25 11:35:21

标签: msbuild properties

让我们考虑下面的例子。 在那里,我有:

  1. 目标MAIN呼叫目标t然后呼叫目标tt。
  2. 目标t调用目标ttt,目标tt调用目标tttt。
  3. target t define property aa,target ttt modify aa。
  4. target tttt尝试打印属性aa的值。
  5. 简而言之,我们有:MAIN - > {t - > {ttt->修改aa,定义aa},tt - > tttt - >打印aa}
  6. 但是在目标tttt中,我们无法“看到”aa的更新值(通过ttt)!请帮助我使目标tttt显示该值。谢谢!

    整个脚本如下:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="MAIN" >
      <Target Name="MAIN" >
        <CallTarget Targets="t" />
        <CallTarget Targets="tt" />
      </Target>
    
      <Target Name="t">
        <Message Text="t" />
        <PropertyGroup>
          <aa>1</aa>
        </PropertyGroup>
        <CallTarget Targets="ttt" />
      </Target>
    
      <Target Name="tt">
        <Message Text="tt" />
        <CallTarget Targets="tttt" />
      </Target>
    
      <Target Name="ttt">
        <PropertyGroup>
          <aa>122</aa>
        </PropertyGroup>
        <Message Text="ttt" />
      </Target>
    
      <Target Name="tttt">
        <Message Text="tttt" />
        <Message Text="tttt:$(aa)" />
      </Target>
    
    </Project>
    

1 个答案:

答案 0 :(得分:2)

正如在另一篇文章的回答中已经说过的那样,您应该使用目标之间的依赖关系建模您的MSBuild项目,而不是一个接一个地调用目标。

<Project DefaultTargets="tttt" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="t">
        <Message Text="t" />
            <PropertyGroup>
                <aa>1</aa>
            </PropertyGroup>
     </Target>

     <Target Name="tt" DependsOnTargets="t">
         <Message Text="tt" />
     </Target>

     <Target Name="ttt" DependsOnTargets="t;tt">
         <PropertyGroup>
             <aa>122</aa>
         </PropertyGroup>
         <Message Text="ttt" />
     </Target>

     <Target Name="tttt" DependsOnTargets="t;tt;ttt">
         <Message Text="tttt" />
         <Message Text="tttt:$(aa)" />
     </Target>
</Project>

我使用的方法是将Target定义为我的最终目标,将其放入项目DefaultTargets中。

然后添加为实现这一目标需要发生的所有事情。