Traitement par lots de MSBuild

Mise à jour : novembre 2007

MSBuild a la capacité de diviser les collections d'éléments en différentes catégories, ou lots, suivant les métadonnées d'éléments, et d'exécuter une cible ou une tâche une fois avec chaque lot.

Traitement par lots de tâches

Le traitement par lots de tâches vous permet de simplifier vos fichiers projet en vous offrant la possibilité de diviser les collections d'éléments en différents lots et de passer chacun de ces lots dans une tâche. Cela signifie que pour un fichier projet, la tâche et ses attributs n'ont besoin d'être déclarés qu'une seule fois, même s'il peut être exécuté plusieurs fois.

Vous spécifiez que vous souhaitez que MSBuild exécute le traitement par lots avec une tâche à l'aide de la notation %(ItemMetaDataName) dans l'un des attributs de tâche. L'exemple suivant fractionne la collection d'éléments Example en lots basés sur la valeur des métadonnées de l'élément Color, et passe séparément chacun des lots à la tâche MyTask.

Remarque :

Si vous ne référencez pas la collection d'éléments ailleurs dans les attributs de tâche, ou si le nom des métadonnées est ambigu, vous pouvez utiliser la notation %(ItemCollection.ItemMetaDataName) pour qualifier pleinement la valeur des métadonnées d'élément à utiliser pour le traitement par lots.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <Example Include="Item1">
            <Color>Blue</Color>
        </Example>
        <Example Include="Item2">
            <Color>Red</Color>
        </Example>
    </ItemGroup>

    <Target Name="RunMyTask">
        <MyTask
            Sources = "@(Example)"
            Output = "%(Color)\MyFile.txt"/>
    </Target>

</Project>

Pour des exemples de traitement par lots plus spécifiques, consultez Comment : traiter des tâches par lots avec des métadonnées d'élément.

Traitement par lots de cible

MSBuild vérifie si les entrées et les sorties d'une cible sont à jour avant d'exécuter la cible. Si les entrées et les sorties sont à jour, la cible est ignorée. Si une tâche dans une cible utilise le traitement par lots, MSBuild doit déterminer si les entrées et les sorties de chaque lot d'éléments sont à jour. Sinon, la cible est exécutée chaque fois qu'elle est atteinte.

L'exemple suivant illustre un élément Target qui contient un attribut Outputs avec la notation %(ItemMetaDataName). MSBuild divisera la collection d'éléments Example en lots basés sur les métadonnées de l'élément Color et analysera les horodatages des fichiers de sortie de chaque lot. Si les sorties d'un lot ne sont pas à jour, la cible est exécutée. Sinon, la cible est ignorée.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <Example Include="Item1">
            <Color>Blue</Color>
        </Example>
        <Example Include="Item2">
            <Color>Red</Color>
        </Example>
    </ItemGroup>

    <Target Name="RunMyTask"
        Inputs="@(Example)"
        Outputs="%(Color)\MyFile.txt">
        <MyTask
            Sources = "@(Example)"
            Output = "%(Color)\MyFile.txt"/>
    </Target>

</Project>

Pour obtenir un autre exemple de traitement par lots des cibles, consultez Comment : traiter des cibles par lots en utilisant des métadonnées d'élément.

Voir aussi

Concepts

Concepts avancés de MSBuild

Référence

ItemMetadata, élément (MSBuild)

Autres ressources

Concepts MSBuild

Référence MSBuild