2009-12-13 66 views
0

我的MSBuild目標文件包含以下部分:是否可以在MSBuild的目標實現中引用目標的元數據?

<ItemGroup> 
    <Targets Include="T1"> 
    <Project>A\B.sln"</Project> 
    <DependsOnTargets>The targets T1 depends on</DependsOnTargets> 
    </Targets> 
    <Targets Include="T2"> 
    <Project>C\D.csproj"</Project> 
    <DependsOnTargets>The targets T2 depends on</DependsOnTargets> 
    </Targets> 
    ... 
</ItemGroup> 
<Target Name="T1" DependsOnTargets="The targets T1 depends on"> 
    <MSBuild Projects="A\B.sln" Properties="Configuration=$(Configuration)" /> 
</Target> 
<Target Name="T2" DependsOnTargets="The targets T2 depends on"> 
    <MSBuild Projects="C\D.csproj" Properties="Configuration=$(Configuration)" /> 
</Target> 

正如你所看到的,A\B.sln出現了兩次:

  1. 作爲ProjectItemGroup區間元的T1
  2. Target聲明本身傳遞給MSBuild任務。

我想知道我是否可以刪除第二個實例,並與參考目標,該名稱是考慮到Target任務的Project元更換呢?

對於(Targets.DependsOnTargets)元數據詢問完全相同的問題。它提到了兩次,就像%(Targets.Project)元數據一樣。

謝謝。

編輯:

我也許應該說明的約束,必須由解決方案滿足:

  1. 我希望能夠建立個別項目提供方便。今天我可以簡單地執行msbuild file.proj /t:T1來構建T1目標,我希望保持這個能力。
  2. 我想強調的是,有些項目依賴於其他項目,所以DependsOnTargets屬性對他們來說確實是必需的。

回答

0

目標名稱必須是固定值,所以你在這裏沒有工作。

此外,我還建議不要在DependsOnTargets表達式中使用Batching Expressions。如果你不完全瞭解發生了什麼,這可能會導致奇怪的行爲。

在您的情況下,您可能只需創建一個使用這些項目執行構建的「驅動程序」目標。唯一困難的部分是你試圖執行的DependsOnTargets。我不確定你想要做什麼的細節,所以不能提出任何建議,但至於另一個看看創建類似的目標。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <ItemGroup> 
    <Targets Include="T1"> 
     <Project>A\B.sln"</Project> 
     <DependsOnTargets>The targets T1 depends on</DependsOnTargets> 
    </Targets> <Targets Include="T2"> 
     <Project>C\D.csproj"</Project> 
     <DependsOnTargets>The targets T2 depends on</DependsOnTargets> 
    </Targets> ... 
    </ItemGroup> 

    <Target Name="Build"> 
    <!-- 
    This will be executed once for every unique value of Project in the 
    Target item group 
    --> 
    <MSBuild Projects="%(Targets.Project)" 
      Properties="Configuration=$(Configuration)" 
    </Target> 
</Project> 
+0

嗨,感謝您的及時回覆。我修改了我的問題來澄清幾點。順便說一下,我已經在使用你建議的乾淨目標的結構,因爲我通常會清理所有的項目。但是我需要能夠構建單個項目,並且我不明白您的解決方案如何讓我這樣做,更不用說它會忽略依賴關係。 – mark 2009-12-13 20:01:58

相關問題