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

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

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

См. также

Задачи

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

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

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

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

Ссылки

Элемент Target (MSBuild)