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

Обновлен: Ноябрь 2007

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

Пакетная обработка задач

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

Используя запись %(ItemMetaDataName) в одном из атрибутов задачи, вы указываете, что MSBuild следует выполнить пакетную обработку задачи. В приведенном ниже примере набор элементов Example разделяется на пакеты на основании значения метаданных элемента Color, и каждый из пакетов отдельно передается в задачу MyTask.

ms171473.alert_note(ru-ru,VS.90).gifПримечание.

Если ссылка на набор элементов не используется в каких-либо других атрибутах задачи, или имя метаданных может оказаться неоднозначным, можно использовать запись %(ItemCollection.ItemMetaDataName), чтобы полностью определить значение метаданных элемента, которое будет использоваться для пакетной обработки.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <Example Include="Item1">
            <Color>Blue</Color>
        </Example>
        <Example Include="Item2">
            <Color>Red</Color>
        </Example>
    </ItemGroup>

    <Target Name="RunMyTask">
        <MyTask
            Sources = "@(Example)"
            Output = "%(Color)\MyFile.txt"/>
    </Target>

</Project>

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

Пакетная обработка целевых объектов

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

В следующем примере показан элемент Target, в котором содержится атрибут Outputs с записью %(ItemMetaDataName). MSBuild разделит набор элементов Example на пакеты на основании метаданных элемента Color и проанализирует метки времени выходных файлов для каждого пакета. Если выходные данные из пакета неактуальны, целевой объект выполняется. В противном случае целевой объект пропускается.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <Example Include="Item1">
            <Color>Blue</Color>
        </Example>
        <Example Include="Item2">
            <Color>Red</Color>
        </Example>
    </ItemGroup>

    <Target Name="RunMyTask"
        Inputs="@(Example)"
        Outputs="%(Color)\MyFile.txt">
        <MyTask
            Sources = "@(Example)"
            Output = "%(Color)\MyFile.txt"/>
    </Target>

</Project>

Другой пример пакетной обработки целевого объекта см. в разделе Практическое руководство. Пакетная обработка целей на основе метаданных элемента.

См. также

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

Дополнительные возможности MSBuild

Ссылки

Элемент ItemMetadata (MSBuild)

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

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

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