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


Метаданные элементов в пакетной обработке целевых объектов

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

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

Целевые объекты при пакетной обработке

В приведенном ниже примере кода содержится список элементов с именем Res, который делится на два пакета на основании метаданных элемента Culture. Каждый из пакетов передается в задачу AL, на выходе которой создается сборка для каждого пакета. Используя пакетную обработку в атрибуте Outputs элемента Target, MSBuild может определить актуальность каждого отдельного пакета перед выполнением целевого объекта. Без использования пакетной обработки целевого объекта оба пакета элементов будут выполняться задачей при каждом выполнении целевого объекта.

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

    <ItemGroup>
        <Res Include="Strings.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Strings.jp.resources">
            <Culture>jp</Culture>
        </Res>
        <Res Include="Menus.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Dialogs.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Dialogs.jp.resources">
            <Culture>jp</Culture>
        </Res>
        <Res Include="Menus.jp.resources">
            <Culture>jp</Culture>
        </Res>
    </ItemGroup>

    <Target Name="Build"
        Inputs="@(Res)"
        Outputs="%(Culture)\MyApp.resources.dll">
        
        <AL Resources="@(Res)"
            TargetType="library"
            OutputAssembly="%(Culture)\MyApp.resources.dll"

    </Target>

</Project>

См. также

Задачи

Практическое руководство. Инкрементное построение

Ссылки

Элемент Target (MSBuild)

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

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

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