Lire en anglais

Partager via


MSBuild

Le moteur de build Microsoft est une plateforme pour la création d’applications. Ce moteur, également appelé MSBuild, fournit un schéma XML pour un fichier projet qui contrôle la façon dont la plateforme de génération traite et génère des logiciels. Visual Studio utilise MSBuild, mais MSBuild ne dépend pas de Visual Studio. En appelant msbuild.exe ou build dotnet sur votre fichier projet ou solution, vous pouvez orchestrer et générer des produits dans des environnements où Visual Studio n’est pas installé.

Visual Studio utilise MSBuild pour charger et générer des projets managés. Les fichiers projet dans Visual Studio (.csproj, .vbproj, .vcxprojet autres) contiennent du code XML MSBuild qui s’exécute lorsque vous générez un projet dans l’IDE. Les projets Visual Studio importent tous les paramètres et processus de génération nécessaires pour effectuer des tâches de développement classiques, mais vous pouvez les étendre ou les modifier à partir de Visual Studio ou à l’aide d’un éditeur de texte.

Pour installer MSBuild sur un système Windows qui n’a pas Visual Studio, accédez à Build Tools pour Visual Studio sur la page de téléchargements . L’installation de MSBuild par cette méthode vous donne MSBuild.exe.

Pour .NET Core et .NET 5 ou version ultérieure, une autre façon d’obtenir l’équivalent de MSBuild consiste à installer le sdk .NET. La commande de build .NET dotnet build est disponible avec le Kit de développement logiciel (SDK) .NET sur macOS, Windows ou Linux. La commande de build .NET dotnet build est une enveloppe fine qui encapsule la version .NET Core de MSBuild.exe. Vous pouvez utiliser la interface de ligne de commande .NET Core (CLI), qui utilise MSBuild, pour générer des projets qui ciblent .NET Core et .NET 5 et versions ultérieures.

À compter de Visual Studio 2022, lorsque vous générez dans Visual Studio, la version 64 bits de MSBuild est utilisée.

Pour plus d’informations sur MSBuild pour C++, consultez MSBuild (C++).

Les exemples suivants illustrent quand vous pouvez exécuter des builds en appelant MSBuild à partir de la ligne de commande au lieu de l’IDE Visual Studio.

  • Visual Studio n’est pas installé.

  • Vous souhaitez utiliser la version 64 bits de MSBuild et vous utilisez Visual Studio 2019 ou une version antérieure. Cette version de MSBuild est généralement inutile, mais elle permet à MSBuild d’accéder à plus de mémoire.

  • Vous souhaitez exécuter une build dans plusieurs processus. Toutefois, vous pouvez utiliser l’IDE pour obtenir le même résultat sur les projets en C++ et C#.

  • Vous souhaitez modifier le système de build. Par exemple, vous pouvez activer les actions suivantes :

    • Prétraiter les fichiers avant d’atteindre le compilateur.

    • Copiez les sorties de build vers un autre emplacement.

    • Créez des fichiers compressés à partir de sorties de build.

    • Effectuez une étape de post-traitement. Par exemple, vous pouvez souhaiter horodater un assembly avec une version différente.

Vous pouvez écrire du code dans l’IDE Visual Studio, mais exécuter des builds à l’aide de MSBuild. Vous pouvez également générer du code dans l’IDE sur un ordinateur de développement, mais exécuter MSBuild à partir de la ligne de commande pour générer du code intégré à partir d’un référentiel source avec la collaboration de plusieurs développeurs.

Note

Vous pouvez utiliser Azure Pipelines pour compiler, tester et déployer automatiquement votre application. Votre système de build peut exécuter automatiquement des builds lorsque les développeurs intègrent du code (par exemple, dans le cadre d’une stratégie de l’intégration continue) ou selon une planification (par exemple, une build de test de vérification nocturne). Azure Pipelines compile votre code à l’aide de MSBuild. Pour plus d’informations, consultez Azure Pipelines.

Pour obtenir un didacticiel d’introduction à MSBuild sur Windows, consultez procédure pas à pas : utilisation de MSBuild.

Utiliser MSBuild dans une invite de commandes

Pour exécuter MSBuild à l’invite de commandes, passez un fichier projet à MSBuild.exe, ainsi que les options de ligne de commande appropriées. Les options de ligne de commande vous permettent de définir des propriétés, d’exécuter des cibles spécifiques et de définir d’autres options qui contrôlent le processus de génération. Par exemple, vous utilisez la syntaxe de ligne de commande suivante pour générer le fichier MyProj.proj avec la propriété Configuration définie sur Debug.

Invite de commandes Windows
MSBuild.exe MyProj.proj -property:Configuration=Debug

MSBuild ne modifie pas son comportement en fonction de l’extension de fichier, mais la convention consiste à utiliser des extensions se terminant par proj telles que .csproj, .vcxprojou .vbproj, pour le fichier d’entrée MSBuild principal, appelé « fichier projet ».

Pour plus d’informations sur les options de ligne de commande MSBuild, consultez référence de ligne de commande.

Important

Avant de télécharger un projet, déterminez la fiabilité du code.

Pour .NET Core et .NET 5 ou version ultérieure, vous utilisez généralement dotnet build pour appeler MSBuild. Consultez build dotnet. Si vous installez uniquement le Kit de développement logiciel (SDK) .NET et non Visual Studio ou Visual Studio Build Tools, vous disposez de MSBuild uniquement via dotnet build.

La ligne de commande dotnet build --help répertorie les options de ligne de commande spécifiques à dotnet build, pas toutes les options de MSBuild.exe, mais vous pouvez toujours utiliser toutes les options de ligne de commande répertoriées dans la référence de ligne de commande MSBuild. Les options qui ne sont pas traitées par dotnet build sont transmises à MSBuild.

Fichier projet

MSBuild utilise un format de fichier projet XML simple et extensible. Le format de fichier projet MSBuild permet aux développeurs de décrire les éléments à générer, ainsi que la façon dont ils doivent être générés pour différents systèmes d’exploitation et configurations. En outre, le format de fichier projet permet aux développeurs de créer des règles de build réutilisables qui peuvent être factorées en fichiers distincts afin que les builds puissent être effectuées de manière cohérente entre différents projets du produit.

Le système de génération Visual Studio stocke une logique spécifique au projet dans le fichier projet lui-même et utilise des fichiers XML MSBuild importés avec des extensions telles que .props et .targets pour définir la logique de génération standard. Les fichiers .props définissent les propriétés MSBuild et .targets fichiers définissent des cibles MSBuild. Ces importations sont parfois visibles dans le fichier projet Visual Studio, mais dans des projets plus récents tels que .NET Core, .NET 5 et .NET 6, vous ne voyez pas les importations dans le fichier projet ; Au lieu de cela, vous voyez une référence du Kit de développement logiciel (SDK), qui ressemble à ceci :

XML
<Project Sdk="Microsoft.Net.Sdk">

Il s’agit de projets de style SDK. Lorsque vous référencez un SDK tel que le Kit de développement logiciel (SDK) .NET, les importations de fichiers .props et .target sont implicitement spécifiées par le Kit de développement logiciel (SDK).

Les sections suivantes décrivent certains des éléments de base du format de fichier projet MSBuild. Pour obtenir un didacticiel sur la création d’un fichier projet de base, consultez procédure pas à pas : création d’un fichier projet MSBuild à partir de zéro.

Propriétés

Les propriétés représentent des paires clé/valeur qui peuvent être utilisées pour configurer des builds. Les propriétés sont déclarées en créant un élément qui a le nom de la propriété en tant qu’enfant d’un élément PropertyGroup. Par exemple, le code suivant crée une propriété nommée BuildDir qui a une valeur de Build.

XML
<PropertyGroup>
    <BuildDir>Build</BuildDir>
</PropertyGroup>

Vous pouvez définir une propriété de manière conditionnelle en plaçant un attribut Condition dans l’élément. Le contenu des éléments conditionnels est ignoré, sauf si la condition prend la valeur true. Dans l’exemple suivant, la propriété Configuration est définie si elle n’a pas encore été définie.

XML
<Configuration  Condition=" '$(Configuration)' == '' ">DefaultValue</Configuration>

Les propriétés peuvent être référencées dans le fichier projet à l’aide de la syntaxe $(<PropertyName>). Par exemple, vous pouvez référencer les propriétés dans les exemples précédents à l’aide de $(BuildDir) et de $(Configuration).

Pour plus d’informations sur les propriétés, consultez Propriétés MSBuild.

Éléments

Les éléments sont des entrées dans le système de build et représentent généralement des fichiers. Les éléments sont regroupés en types d’éléments en fonction des noms d’éléments définis par l’utilisateur. Ces types d’éléments peuvent être utilisés comme paramètres pour les tâches, qui utilisent les éléments individuels pour effectuer les étapes du processus de génération.

Les éléments sont déclarés dans le fichier projet en créant un élément portant le nom du type d’élément en tant qu’enfant d’un élément ItemGroup. Par exemple, le code suivant crée un type d’élément nommé Compile, qui inclut deux fichiers.

XML
<ItemGroup>
    <Compile Include = "file1.cs"/>
    <Compile Include = "file2.cs"/>
</ItemGroup>

Les types d’éléments peuvent être référencés dans le fichier projet à l’aide de la syntaxe @(<ItemType>). Par exemple, le type d’élément dans l’exemple serait référencé à l’aide de @(Compile).

Dans MSBuild, les noms d'éléments et des attributs respectent la casse. Toutefois, noms de propriété, d’élément et de métadonnées ne le sont pas. L’exemple suivant crée le type d’élément Compile, comPileou toute autre variante de cas et donne au type d’élément la valeur « one.cs ; two.cs ».

XML
<ItemGroup>
  <Compile Include="one.cs" />
  <Compile Include="two.cs" />
</ItemGroup>

Les éléments peuvent être déclarés à l’aide de caractères génériques et peuvent contenir des métadonnées supplémentaires pour des scénarios de génération plus avancés. Pour plus d’informations sur les éléments, consultez Éléments.

Tâches

Les tâches sont des unités de code exécutable que les projets MSBuild utilisent pour effectuer des opérations de génération. Par exemple, une tâche peut compiler des fichiers d’entrée ou exécuter un outil externe. Les tâches peuvent être réutilisées, et elles peuvent être partagées par différents développeurs dans différents projets.

La logique d’exécution d’une tâche est écrite en code managé et mappée à MSBuild à l’aide de l’élément UsingTask. Vous pouvez écrire votre propre tâche en créant un type managé qui implémente l’interface ITask. Pour plus d’informations sur comment rédiger des tâches, consultez Rédaction de tâches.

MSBuild inclut des tâches courantes que vous pouvez modifier en fonction de vos besoins. Les exemples sont Copier, qui copie des fichiers, MakeDir, qui crée des répertoires et Csc, qui compile les fichiers de code source Visual C#. Pour obtenir la liste des tâches disponibles avec les informations d’utilisation, consultez référence de tâche.

Une tâche est exécutée dans un fichier projet MSBuild en créant un élément qui a le nom de la tâche en tant qu’enfant d’un élément Target. Les tâches acceptent généralement les paramètres, qui sont passés en tant qu’attributs de l’élément. Les propriétés et les éléments MSBuild peuvent être utilisés comme paramètres. Par exemple, le code suivant appelle la tâche MakeDir et lui passe la valeur de la propriété BuildDir qui a été déclarée dans l’exemple précédent.

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

Pour plus d’informations sur les tâches, consultez Tâches.

Cibles

Cible les tâches de groupe dans un ordre particulier et expose les sections du fichier projet en tant que points d’entrée dans le processus de génération. Les cibles sont souvent regroupées en sections logiques pour augmenter la lisibilité et permettre l’expansion. La rupture des étapes de génération en cibles vous permet d’appeler une partie du processus de génération à partir d’autres cibles sans copier cette section de code dans chaque cible. Par exemple, si plusieurs points d’entrée dans le processus de génération nécessitent la génération de références, vous pouvez créer une cible qui génère des références, puis exécuter cette cible à partir de chaque point d’entrée où elle est requise.

Les cibles sont déclarées dans le fichier projet à l’aide de l’élément Target. Par exemple, le code suivant crée une cible nommée Compile, qui appelle ensuite la tâche Csc qui a la liste d’éléments déclarée dans l’exemple précédent.

XML
<Target Name="Compile">
    <Csc Sources="@(Compile)" />
</Target>

Dans des scénarios plus avancés, les cibles peuvent être utilisées pour décrire les relations entre elles et effectuer une analyse des dépendances afin que des sections entières du processus de génération puissent être ignorées si cette cible est up-to-date. Pour plus d’informations sur les cibles, consultez l’article Cibles.

Journaux de build

Vous pouvez consigner les erreurs de génération, les avertissements et les messages sur la console ou un autre appareil de sortie. Pour plus d’informations, consultez Obtention de journaux de build avec MSBuild.

Utiliser MSBuild dans Visual Studio

Visual Studio utilise le format de fichier projet MSBuild pour stocker des informations de build sur les projets gérés. Les paramètres de projet ajoutés ou modifiés à l’aide de l’interface Visual Studio sont reflétés dans le fichier .*proj généré pour chaque projet. Visual Studio utilise une instance hébergée de MSBuild pour générer des projets managés. Cela signifie qu’un projet managé peut être généré dans Visual Studio ou à une invite de commandes (même si Visual Studio n’est pas installé) et que les résultats seront identiques.

Pour obtenir un didacticiel sur l’utilisation de MSBuild dans Visual Studio, consultez procédure pas à pas : utilisation de MSBuild.

Ciblage multiple

En utilisant Visual Studio, vous pouvez compiler une application pour s’exécuter sur une des versions de .NET Framework ou .NET Core, notamment .NET 5 et versions ultérieures. Par exemple, vous pouvez compiler une application à exécuter sur .NET Framework 4 sur une plateforme 32 bits, et vous pouvez compiler la même application à exécuter sur .NET Framework 4.8 sur une plateforme 64 bits. La possibilité de compiler sur plusieurs frameworks est appelée "multiciblage".

Voici quelques-uns des avantages de multi-ciblage :

  • Vous pouvez développer des applications qui ciblent des versions antérieures de .NET Framework, par exemple, les versions 3.5 et 4.7.2.

  • Vous pouvez cibler un profil d’infrastructure , qui est un sous-ensemble prédéfini d’une infrastructure cible.

  • Si un Service Pack pour la version actuelle de .NET Framework est publié, vous pouvez le cibler.

  • Le multi-ciblage garantit qu’une application utilise uniquement les fonctionnalités disponibles dans l’infrastructure cible et la plateforme.

Pour plus d’informations, consultez l’article Multi-ciblage.

Personnalisation de la build

MSBuild prend en charge un large éventail de scénarios de génération personnalisés. La plupart des fonctionnalités intégrées peuvent être remplacées ou étendues. Consultez Personnalisation d’une build.

Accès par programmation à MSBuild

Si vous développez un outil de génération, vous pouvez appeler MSBuild par programmation à partir d’une application .NET. À l’aide de l’API MSBuild, vous pouvez contrôler tous les aspects d’un système de génération complexe. MSBuild fournit un package NuGet avec une API complète (espace de noms Microsoft.Build) que vous pouvez utiliser à partir d’une application .NET à ces fins. Consultez Utiliser l’API MSBuild.

MSBuild est open source

MSBuild est un projet open source qui accepte les contributions utilisateur au dépôt GitHub MSBuild.

Voir aussi

Titre Description
procédure pas à pas : création d’un fichier projet MSBuild à partir de zéro Montre comment créer un fichier projet de base de manière incrémentielle en utilisant uniquement un éditeur de texte.
Procédure pas à pas : utilisation de MSBuild Présente les blocs de construction de MSBuild et montre comment écrire, manipuler et déboguer des projets MSBuild sans fermer l’IDE Visual Studio.
Concepts de MSBuild Présente les quatre blocs de construction de MSBuild : propriétés, éléments, cibles et tâches.
Éléments Décrit les concepts généraux derrière le format de fichier MSBuild et la façon dont les éléments s’intègrent ensemble.
Propriétés MSBuild Présente les propriétés et les collections de propriétés. Les propriétés sont des paires clé/valeur qui peuvent être utilisées pour configurer des builds.
Cibles Explique comment regrouper des tâches dans un ordre particulier et permettre aux sections du processus de génération d’être appelées sur la ligne de commande.
Tâches Montre comment créer une unité de code exécutable qui peut être utilisée par MSBuild pour effectuer des opérations de génération atomiques.
Conditions Explique comment utiliser l’attribut Condition dans un élément MSBuild.
Traitement par lots Explique comment MSBuild catégorise les listes d’éléments par métadonnées pour l’exécution dans les tâches et les cibles.
Multi-ciblage Montre comment cibler plusieurs versions de .NET et/ou plusieurs plateformes.
Obtention de journaux de build Décrit comment journaliser les événements de génération, les messages et les erreurs.
Comment MSBuild génère des projets Décrit le processus de génération interne utilisé dans MSBuild
Créer une tâche personnalisée pour la génération de code Montre comment créer une tâche personnalisée, avec un exemple de code.
utiliser MSBuild pour générer un client d’API REST Montre comment étendre la build pour gérer la génération du client d’API REST, avec un exemple de code.
ressources supplémentaires Répertorie les ressources de la communauté et de support pour plus d’informations sur MSBuild.

Référence