Traitement par lots de MSBuild

MSBuild a la capacité de diviser les listes 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 listes 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 liste d'éléments Example en lots en fonction de la valeur des métadonnées de l'élément Color, et passe séparément chacun des lots à la tâche MyTask.

Notes

Si vous ne référencez pas la liste 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 Métadonnées d'éléments dans le traitement par lots de tâches.

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 divise la liste d'éléments Example en lots en fonction des métadonnées de l'élément Color et analyse 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 Métadonnées d'éléments dans le traitement par lots de cibles.

Fonctions de propriété utilisant des métadonnées

Le traitement par lot peut être contrôlé par des fonctions de propriété qui incluent des métadonnées. Par exemple :

$([System.IO.Path]::Combine($(RootPath),%(Compile.Identity)))

utilise Combine pour combiner un chemin d'accès au dossier racine à un chemin d'accès à l'élément Compile.

Les fonctions de propriété peuvent ne pas s'afficher dans les valeurs de métadonnées. Par exemple :

%(Compile.FullPath.Substring(0,3))

n'est pas autorisé.

Pour plus d'informations sur les fonctions de propriété, consultez Fonctions de propriété.

Voir aussi

Référence

ItemMetadata, élément (MSBuild)

Autres ressources

Concepts MSBuild

Référence MSBuild

Concepts avancés de MSBuild