2010-03-25 99 views
3

讓我們考慮下面的例子。 在那裏,我有:設置屬性值的問題

  1. 目標MAIN調用目標t然後調用目標tt。
  2. target t call target ttt,target tt call target tttt。
  3. target t定義屬性aa,目標ttt修改aa。
  4. target tttt嘗試打印屬性aa的值。總之
  5. 我們:首頁 - >【T - > {ttt->修改AA,AA定義},TT - > TTTT - >打印AA}

但在目標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> 
+0

在上面的腳本中,如果我刪除目標t中的一個定義,則在目標tttt中,aa爲122,如在目標ttt中更新的那樣。我不明白髮生了什麼事。 – 2010-03-25 14:47:44

回答

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中。

然後添加所有需要實現此目標的事情。