2017-06-01 19 views
0

ItemGroupの各アイテムのリストプロパティを拡張するにはどうすればよいですか?私は、プロパティを次のようにしようとした場合、すべての項目に展開されます:msbuild `ItemGroup`内の各アイテムのリストプロパティを拡張する方法は?

<ItemGroup> 
    <Foo Include="foo"> 
     <Bar>a;b;c</Bar> 
    </Foo>  
    <Foo Include="bar"> 
     <Bar>d;e;f</Bar> 
    </Foo> 
</ItemGroup> 

<Target Name="Build"> 
    <ItemGroup> 
     <Foobars Include="%(Foo.Bar)" /> 
    </ItemGroup> 

    <Message Text="%(Foo.Identity) %(Foo.Bar) @(Foobars -> '%(Identity)', ' ')" /> 
</Target> 

出力は次のようになります。

foo a;b;c a b c d e f 
bar d;e;f a b c d e f 

私は必要なものである:

foo a;b;c a b c 
bar d;e;f d e f 

答えて

0

%(Foo.Identity)を追加する場合メタデータとして%(Foo.Bar)Foobarsに設定すると、メタデータの値を反復処理するときに、@(Foobars)に含まれる値を制限することができますS:

<Project> 
    <ItemGroup> 
     <Foo Include="foo"> 
      <Bar>a;b;c</Bar> 
     </Foo>  
     <Foo Include="bar"> 
      <Bar>d;e;f</Bar> 
     </Foo> 
    </ItemGroup> 

    <Target Name="Build"> 
     <ItemGroup> 
      <Foobars Include="%(Foo.Bar)"> 
       <Foo>%(Foo.Identity)</Foo> 
       <Bar>%(Foo.Bar)</Bar> 
      </Foobars> 
     </ItemGroup> 

     <Message Text="%(Foobars.Foo) %(Foobars.Bar) @(Foobars -> '%(Identity)', ' ')" Importance="high" /> 
    </Target> 
</Project> 

が生成する:

$ dotnet msbuild 
Microsoft (R) Build Engine version 15.3.234.47922 for .NET Core 
Copyright (C) Microsoft Corporation. All rights reserved. 

    foo a;b;c a b c 
    bar d;e;f d e f 
関連する問題