0

可以用msbuild做這種轉換嗎?將元數據轉換爲項目?可以用msbuild做這種轉換

此:

<ItemGroup> 
    <Group Include="G1"> 
     <A>1</A> 
     <B>1</B> 
    </Group> 

    <Group Include="G2"> 
     <A>2</A> 
     <B>2</B> 
    </Group> 
</ItemGroup> 

要這樣:

<ItemGroup> 
    <A>1</A> 
    <A>2</A> 

    <B>1</B> 
    <B>2</B> 
</ItemGroup> 

回答

0

您可以使用batching

這將創建新的項目組A ABD B爲基礎的集團。新項目組不必使用與元數據相同的名稱。在CreateItem/Output中設置ItemName以使用不同的名稱。

<?xml version="1.0" encoding="utf-8"?> 
<Project 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
    ToolsVersion="4.0" 
    DefaultTargets="Default"> 

    <ItemGroup> 
     <Group Include="G1"> 
      <A>1</A> 
      <B>1</B> 
     </Group> 
     <Group Include="G2"> 
      <A>2</A> 
      <B>2</B> 
     </Group> 
    </ItemGroup> 

    <Target Name="Default"> 
     <Message Text="@(Group)" Importance="High" /> 

     <CreateItem Include="%(Group.A)"> 
      <Output TaskParameter="Include" ItemName="A" /> 
     </CreateItem> 
     <CreateItem Include="%(Group.B)" AdditionalMetadata="From=%(Group.Identity)"> 
      <Output TaskParameter="Include" ItemName="B" /> 
     </CreateItem> 

     <Message Text="[email protected](A)" Importance="High" /> 
     <Message Text="[email protected](B):%(B.From)" Importance="High" /> 
    </Target> 

</Project> 

新的「B」組也定義稱爲從該元數據項給出的每個項目將其從複製原始項目組名稱。

更新:隨着MSBuild的3.5或更新版本,你也可以用這個代替CreateItem的:

<ItemGroup> 
    <A Include="%(Group.A)" /> 
    <B Include="%(Group.B)"> 
     <From>%(Group.Identity)</From> 
    </B> 
</ItemGroup> 
+0

謝謝你,這將是非常有用的= ^〜= –

+0

我我的答案更新與另一個(容易)的方式。去做吧。 –