Поделиться через


Метаданные элементов в пакетной обработке задач

В MSBuild можно разделять списки элементов на разные категории (пакеты) на основании метаданных элементов и выполнять задачу с использованием каждого пакета в отдельности.При этом не всегда удается точно определить, какие элементы передаются с каким пакетом.В данном разделе рассматриваются наиболее распространенные сценарии, включающие пакетную обработку.

  • Деление списка элементов на пакеты

  • Деление нескольких списков элементов на пакеты

  • Пакетная обработка одного элемента за один раз

  • Фильтрация списков элементов

Дополнительные сведения о пакетной обработке с использованием MSBuild см. в разделе Пакетная обработка в MSBuild.

Деление списка элементов на пакеты

Пакетная обработка позволяет разделить список элементов на различные пакеты на основании метаданных элементов и передавать задаче каждый из пакетов отдельно.Это может оказаться полезным при создании вспомогательных сборок.

В следующем примере показано, как разделить список элементов на пакеты на основании метаданных элементов.Список элементов ExampColl делится на три пакета на основании метаданных элемента Number.Наличие %(ExampColl.Number) в атрибуте Text указывает MSBuild, что следует выполнить пакетную обработку.Список элементов ExampColl делится на три пакета на основании метаданных Number, и каждый пакет отдельно передается задаче.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>
        <ExampColl Include="Item4">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item5">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item6">
            <Number>3</Number>
        </ExampColl>
    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Number: %(ExampColl.Number) -- Items in ExampColl: @(ExampColl)"/>
    </Target>

</Project>

В задаче Задача Message отображается следующая информация:

Number: 1 -- Items in ExampColl: Item1;Item4

Number: 2 -- Items in ExampColl: Item2;Item5

Number: 3 -- Items in ExampColl: Item3;Item6

Деление нескольких списков элементов на пакеты

MSBuild может разделить несколько списков элементов на пакеты на основании одних и тех же метаданных.Это упрощает деление различных списков элементов на пакеты для создания нескольких сборок.Например, можно создать список элементов из CS-файлов, разделенных на пакет приложения и пакет сборки, и список элементов из файлов ресурсов, разделенных на пакет приложения и пакет сборки.Затем можно с помощью пакетной обработки передать эти списки элементов в одну задачу и создать и приложение, и сборку.

ПримечаниеПримечание

Если передаваемый задаче список элементов не содержит элементов с указанными метаданными, каждый элемент в этом списке передается в каждый пакет.

В следующем примере показано, как разделить несколько списков элементов на пакеты на основании метаданных элементов.Каждый из списков элементов ExampColl и ExampColl2 делится на три пакета на основании метаданных элемента Number.Наличие %(Number) в атрибуте Text указывает MSBuild, что следует выполнить пакетную обработку.Списки элементов ExampColl и ExampColl2 делятся на три пакета на основании метаданных Number, и каждый пакет отдельно передается задаче.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>

        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>

        <ExampColl2 Include="Item4">
            <Number>1</Number>
        </ExampColl2>
        <ExampColl2 Include="Item5">
            <Number>2</Number>
        </ExampColl2>
        <ExampColl2 Include="Item6">
            <Number>3</Number>
        </ExampColl2>

    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Number: %(Number) -- Items in ExampColl: @(ExampColl) ExampColl2: @(ExampColl2)"/>
    </Target>

</Project>

В задаче Задача Message отображается следующая информация:

Number: 1 -- Items in ExampColl: Item1 ExampColl2: Item4

Number: 2 -- Items in ExampColl: Item2 ExampColl2: Item5

Number: 3 -- Items in ExampColl: Item3 ExampColl2: Item6

Пакетная обработка одного элемента за один раз

Пакетная обработка может также выполняться по известным метаданным, которые назначаются каждому элементу при создании.Этим обеспечивается, что каждый элемент в наборе будет содержать некоторые метаданные для использования при пакетной обработке.Значение метаданных Identity уникально для каждого элемента и используется для выделения каждого элемента списка в отдельный пакет.Полный список известных метаданных элементов см. в разделе Общеизвестные метаданные элементов MSBuild.

В следующем примере показано, как выполнить пакетную обработку каждого элемента по отдельности.Поскольку значение метаданных Identity каждого элемента уникально, список элементов ExampColl делится на шесть пакетов, каждый из которых содержит один элемент списка.Наличие %(Identity) в атрибуте Text указывает MSBuild, что следует выполнить пакетную обработку.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>

        <ExampColl Include="Item1"/>
        <ExampColl Include="Item2"/>
        <ExampColl Include="Item3"/>
        <ExampColl Include="Item4"/>
        <ExampColl Include="Item5"/>
        <ExampColl Include="Item6"/>

    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Identity: &quot;%(Identity)&quot; -- Items in ExampColl: @(ExampColl)"/>
    </Target>

</Project>

В задаче Задача Message отображается следующая информация:

Identity: "Item1" -- Items in ExampColl: Item1
Identity: "Item2" -- Items in ExampColl: Item2
Identity: "Item3" -- Items in ExampColl: Item3
Identity: "Item4" -- Items in ExampColl: Item4
Identity: "Item5" -- Items in ExampColl: Item5
Identity: "Item6" -- Items in ExampColl: Item6

Фильтрация списков элементов

Пакетную обработку можно использовать для фильтрации определенных элементов из списка перед передачей их задаче.Например, используя фильтрацию по значению известных метаданных элемента Extension, можно выполнить задачу только для файлов с определенным расширением.

В следующем примере показано, как разделить список элементов на пакеты на основании метаданных элементов, а затем отфильтровать эти пакеты при передаче их задаче.Список элементов ExampColl делится на три пакета на основании метаданных элемента Number.Атрибут Condition задачи указывает, что задаче будут переданы только пакеты, для которых метаданные элемента Number имеют значение 2.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>

        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>
        <ExampColl Include="Item4">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item5">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item6">
            <Number>3</Number>
        </ExampColl>

    </ItemGroup>

    <Target Name="Exec">
        <Message
            Text = "Items in ExampColl: @(ExampColl)"
            Condition="'%(Number)'=='2'"/>
    </Target>

</Project>

В задаче Задача Message отображается следующая информация:

Items in ExampColl: Item2;Item5

См. также

Ссылки

Общеизвестные метаданные элементов MSBuild

Элемент Item (MSBuild)

Элемент ItemMetadata (MSBuild)

Основные понятия

Пакетная обработка в MSBuild

Другие ресурсы

Основные возможности MSBuild

Справочные сведения о MSBuild