Share via


Arbeiten mit Elementmetadaten im Zielbatching

MSBuild kann eine Abhängigkeitsanalyse für die Ein- und Ausgaben eines Buildziels ausführen. Wenn ermittelt wird, dass die Ein- oder Ausgaben des Ziels auf dem neuesten Stand sind, wird das Ziel übersprungen und der Build fortgesetzt. Target-Elemente verwenden die Inputs- und Outputs-Attribute, um die Elemente festzulegen, die bei der Abhängigkeitsanalyse überprüft werden.

Wenn ein Ziel eine Aufgabe enthält, die Batchelemente als Eingaben oder Ausgaben verwendet, sollte in den Inputs- oder Outputs-Attributen von Element Target im Ziel die Batchverarbeitung genutzt werden, damit MSBuild Elementbatches überspringen kann, die bereits auf dem neuesten Stand sind.

Ziele für die Batchverarbeitung

Das folgende Beispiel enthält die Elementliste Res, die mithilfe der Culture-Elementmetadaten in zwei Batches aufgeteilt wird. Jeder Batch wird der AL-Aufgabe übergeben, die jeweils eine Ausgabeassembly erstellt. Durch die Batchverarbeitung von Outputs-Attributen des Target-Elements kann MSBuild vor dem Ausführen des Ziels ermitteln, ob jeder Batch aktuell ist. Ohne die Batchverarbeitung von Zielen würden beide Elementbatches immer dann von der Aufgabe ausgeführt werden, wenn das Ziel ausgeführt wird.

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