tâches MSBuild

Une plateforme de génération doit pouvoir exécuter plusieurs actions pendant le processus de génération. MSBuild utilise des tâches pour effectuer ces actions. Une tâche est une unité de code exécutable utilisée par MSBuild pour exécuter des opérations de génération atomiques.

Logique de tâche

Comme le format de fichier projet XML MSBuild ne peut pas exécuter entièrement les opérations de génération seul, une logique de tâche doit être implémentée en dehors du fichier projet.

La logique d’exécution d’une tâche est implémentée en tant que classe .NET implémentant l’interface ITask, définie dans l’espace de noms Microsoft.Build.Framework.

La classe de tâche définit également les paramètres d’entrée et de sortie qui sont disponibles pour la tâche dans le fichier projet. Toutes les propriétés non abstraites et non statiques exposées par la classe de tâches peuvent recevoir des valeurs dans le fichier projet en plaçant un attribut correspondant portant le même nom sur l’élément Tâche et en définissant sa valeur comme indiqué dans les exemples plus loin dans cet article.

Vous pouvez écrire votre propre tâche en créant une classe managée qui implémente l’interface ITask. Pour plus d’informations, voir Écriture de tâches.

Exécuter une tâche à partir d’un fichier projet

Avant d’exécuter une tâche dans votre fichier projet, vous devez d’abord mapper le type inclus dans l’assembly qui implémente la tâche au nom de la tâche avec l’élément UsingTask. Cette opération permet à MSBuild de savoir où rechercher la logique d’exécution de votre tâche lorsqu’il la trouve dans votre fichier projet.

Pour exécuter une tâche dans un fichier projet MSBuild, créez un élément pourvu du nom de la tâche comme enfant d’un élément Target. Si une tâche accepte des paramètres, ceux-ci sont transmis en tant qu’attributs de l’élément.

Les propriétés et les listes d’éléments MSBuild peuvent être utilisées comme des paramètres. Par exemple, le code suivant appelle la tâche MakeDir et définit la valeur de la propriété Directories de l’objet MakeDir égale à la valeur de la propriété BuildDir :

<Target Name="MakeBuildDirectory">
    <MakeDir
        Directories="$(BuildDir)" />
</Target>

Les tâches peuvent également retourner des informations au fichier projet, qui peuvent être stockées dans les éléments ou les propriétés en vue d’une utilisation ultérieure. Par exemple, le code suivant appelle la tâche Copy et stocke les informations de la propriété en sortie CopiedFiles dans la liste d’éléments SuccessfullyCopiedFiles.

<Target Name="CopyFiles">
    <Copy
        SourceFiles="@(MySourceFiles)"
        DestinationFolder="@(MyDestFolder)">
        <Output
            TaskParameter="CopiedFiles"
            ItemName="SuccessfullyCopiedFiles"/>
     </Copy>
</Target>

Tâches incluses

MSBuild est fourni avec de nombreuses tâches telles que Copier, qui copie des fichiers, MakeDir, qui crée des répertoires et Csc, qui compile les fichiers de code source C#. Pour obtenir la liste complète des tâches disponibles et les informations sur leur utilisation, consultez l’article Informations de référence sur les tâches MSBuild.

Tâches écrasées

MSBuild recherche des tâches à plusieurs emplacements. Le premier emplacement se trouve dans les fichiers avec l’extension .OverrideTasks stockés dans le répertoire MSBuild. Les tâches contenues dans ces fichiers remplacent toutes les autres tâches du même nom, notamment les tâches du fichier projet. Le deuxième emplacement se trouve dans le fichier projet et ses importations. Si la tâche n’est pas définie dans le projet, elle est recherchée dans les tâches par défaut de MSBuild qui sont définies dans un fichier .tasks dans le répertoire MSBuild.