可以使用msbuild进行这种转换

可以使用msbuild进行这种转换,msbuild,msbuild-task,msbuild-4.0,msbuildcommunitytasks,msbuildextensionpack,Msbuild,Msbuild Task,Msbuild 4.0,Msbuildcommunitytasks,Msbuildextensionpack,是否可以使用msbuild进行这种转换?将元数据转换为项目 这: 1. 1. 2. 2. 为此: <ItemGroup> <A>1</A> <A>2</A> <B>1</B> <B>2</B> </ItemGroup> 1. 2. 1. 2. 您可以使用: 这将基于组创建新的项目组A和B。新项目组不必使用与元数据相同的名称。在Creat

是否可以使用msbuild进行这种转换?将元数据转换为项目

这:


1.
1.
2.
2.
为此:

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

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

1.
2.
1.
2.
您可以使用:

这将基于组创建新的项目组A和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="A=@(A)" Importance="High" />
        <Message Text="B=@(B):%(B.From)" Importance="High" />
    </Target>

</Project>

1.
1.
2.
2.
新的“B”组还定义了一个名为From的元数据项,该元数据项为每个项提供了它从中复制的原始项组名称

更新:对于msbuild 3.5或更新版本,您也可以使用此选项而不是CreateItem:

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

%(团体身份)

谢谢,这将非常有用=^~=
<ItemGroup>
    <A Include="%(Group.A)" />
    <B Include="%(Group.B)">
        <From>%(Group.Identity)</From>
    </B>
</ItemGroup>