Partager via


Utiliser les métadonnées de l'élément dans le traitement par lot de la cible

MSBuild peut effectuer une analyse des dépendances sur les entrées et les sorties d’une cible de build. S’il est déterminé que les entrées ou les sorties de la cible sont à jour, la cible est ignorée et la génération a lieu. Les éléments Target utilisent les attributs Inputs et Outputs pour spécifier les éléments à inspecter pendant l’analyse des dépendances.

Si une cible contient une tâche qui utilise des éléments traités par lots comme entrées ou sorties, l’élément Target de la cible doit utiliser le traitement par lots dans ses attributs Inputs ou Outputs pour permettre à MSBuild d’ignorer les lots d’éléments qui sont déjà à jour.

Traiter des cibles par lots

L’exemple suivant contient une liste d’éléments nommée Res qui est divisée en deux lots, selon les métadonnées de l’élément Culture. Chacun de ces lots est passé à la tâche AL, qui crée un assembly de sortie pour chaque lot. L’utilisation du traitement par lot sur l’attribut Outputs de l’élément Target permet à MSBuild de déterminer si chaque lot est à jour avant d’exécuter la cible. Si vous n’utilisez pas le traitement par lot des cibles, les deux lots d’éléments sont exécutés par la tâche chaque fois que la cible est exécutée.

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