Работа с метаданными элемента в целевой пакетной обработке

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

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

Целевые объекты пакетной службы

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

<Project
    xmlns="http://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">
        </AL>

    </Target>

</Project>