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

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