Такое преобразование можно выполнить с помощью 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>

person Thiago da Silva Andrade Soares    schedule 21.05.2013    source источник


Ответы (1)


Вы можете использовать пакетную обработку:

Это создает новые группы элементов A и B на основе группы. Новые группы элементов не должны использовать то же имя, что и метаданные. Установите ItemName в CreateItem/Output, чтобы использовать другое имя.

<?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>

Новая группа «B» также определяет элемент метаданных From, который дает каждому элементу исходное имя группы элементов, из которого он был скопирован.

Обновление: с msbuild 3.5 или новее вы также можете использовать это вместо CreateItem:

<ItemGroup>
    <A Include="%(Group.A)" />
    <B Include="%(Group.B)">
        <From>%(Group.Identity)</From>
    </B>
</ItemGroup>
person Brian Walker    schedule 21.05.2013
comment
Спасибо, это будет очень полезно =^.~= - person Thiago da Silva Andrade Soares; 22.05.2013