2011-03-02 24 views
0

我正在基於項目A創建項目B,並且想要將A的所有元數據複製到B(並添加一些額外的元數據)。在msbuild中複製項目的元數據

<ItemGroup> 
    <B Include="@A"> 
    <M1>%(A.M1)</M1> 
    <M2>%(A.M2)</M2> 
    <M3>%(A.M3)</M3> 
    ... 
    <M100>%(A.M100)</M100> 
    ... Additional metadata specific to B ... 
    </B> 
</ItemGroup> 

而是每一個複製元數據M1的 - M100分別從A到B,是有可能告訴MSBuild的所有元數據從A複製到B?
這樣的「批量元數據副本」是否可以調節?

喜歡的東西:

<ItemGroup> 
    <B Include="@A">   
    ... Additional metadata specific to B ... 
    </B> 
</ItemGroup> 
<CopyMetadata From="@A" To="@B" Condition="... Check something ..."/> 

感謝。

回答

7

當您複製項目時,它的metadata也被複制。參見工作實施例爲的MSBuild V4.0

<Project DefaultTargets="DoSomethingWithB" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
    <A Include="1"> 
     <M1>M1 (1)</M1> 
     <M2>M2 (1)</M2> 
     <M3>M3 (1)</M3> 
     <N4>HERE</N4> 
    </A> 
    <A Include="2"> 
     <M1>M1 (2)</M1> 
     <M2>M2 (2)</M2> 
     <M3>M3 (2)</M3> 
    </A> 
    </ItemGroup> 

    <Target Name="PrepareB" Outputs="%(A.Identity)"> 
    <ItemGroup> 
     <B Include="@(A)"> 
     <M4>M4 (%(A.Identity))</M4> 
     <M5 Condition="'%(A.N4)'!=''">M5 (%(A.Identity) for A.N4 != '')</M5> 
     </B> 
    </ItemGroup>  
    </Target> 

    <Target Name="DoSomethingWithB" 
      DependsOnTargets="PrepareB"> 

    <Message Text="ItemGroup A" /> 
    <Message Text="%(A.Identity): M1=%(A.M1), M2=%(A.M2), M3=%(A.M3), N4=%(A.N4)" /> 

    <Message Text="ItemGroup B" /> 
    <Message Text="%(B.Identity): M1=%(B.M1), M2=%(B.M2), M3=%(B.M3), N4=%(B.N4), M4=% (B.M4), M5=%(B.M5)" /> 
    </Target> 
</Project> 

輸出:

的ItemGroup甲
1:M1 = M1(1),M2 = M2(1),M3 (2),M2 = M2(2),M3 = M3(2),N4 =
ItemGroup B
1:M1 = M1(1)= M3(1),N4 = HERE
2:M1 = M1 ,M2 = M2(1),M3 = M3(1),N4 = HERE,M4 = M4(1),M5 = M5 '')
2:M1 = M1(2),M 2 = M2(2),M3 = M3(2),N4 =,M4 = M4(2),M5 =

+0

1爲示出了如何將項目組複製到另一個項目組。以前從未在任何文檔中看到過。謝謝。 – 2013-04-17 21:30:25

相關問題