ターゲットのバッチ処理で項目のメタデータを操作する

MSBuild には、ビルド ターゲットの入力と出力の依存関係の分析を実行する機能があります。 ターゲットの入力または出力が最新の状態であると判断された場合、ターゲットはスキップされ、ビルドが進行します。 Target 要素は Inputs 属性と Outputs 属性を利用し、依存関係分析中に検査する項目を指定します。

バッチ処理された項目を入力または出力として使用するタスクがターゲットに含まれている場合、ターゲットの Target 要素では、既に最新の状態になっている項目のバッチ処理を MSBuild でスキップできるようにするために、その Inputs または Outputs 属性でバッチ処理を利用する必要があります。

バッチのターゲット

次の例には、Culture 項目メタデータに基づいて 2 つのバッチに分割されている Res という名前の項目一覧が含まれています。 これらのバッチのいずれも AL タスクに渡されます。このタスクで、バッチごとに出力アセンブリが作成されます。 Target 要素の Outputs 属性でバッチ処理を利用することで、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>