Créer une configuration personnalisée de l'ensemble d'outils

Un ensemble d’outils MSBuild contient des références à des tâches, des cibles et des outils que vous pouvez utiliser pour générer un projet d’application. MSBuild inclut un ensemble d’outils standard, mais vous pouvez également créer des ensembles d’outils personnalisés.

Configurations de l’ensemble d’outils standard

MSBuild contient l’ensemble d’outils standard Current qui référence la version actuelle de MSBuild, qui est installée dans le dossier MSBuild\Current\Bin sous le répertoire d’installation de Visual Studio.

Définitions d’ensembles d’outils personnalisés

Quand un ensemble d’outils standard ne répond pas à vos exigences de build, vous pouvez créer un Toolset personnalisé. Par exemple, vous pouvez avoir un scénario de laboratoire de génération dans lequel vous devez disposer d’un système distinct pour la génération de projets C++. En utilisant un Toolset personnalisé, vous pouvez affecter des valeurs personnalisées à l’attribut ToolsVersion lors de l’exécution de MSBuild.exe à l’aide du commutateur de ligne de commande /toolsVersion. Si vous spécifiez l’attribut ToolsVersion dans le fichier projet, il est ignoré.

Il est également possible d’utiliser la propriété $(MSBuildToolsPath) pour importer des fichiers .targets à partir de ce répertoire, ainsi que de définir ses propres propriétés d’ensemble d’outils personnalisé pour pouvoir les utiliser à chaque projet exploitant cet ensemble d’outils.

Spécifiez un ensemble d’outils personnalisé dans le fichier de configuration de MSBuild.exe (ou de l’outil personnalisé qui héberge le moteur MSBuild si c’est ce que vous utilisez). Par exemple, le fichier de configuration de MSBuild.exe pourrait inclure la définition Toolset suivante si vous souhaitiez définir un ensemble d’outils nommé MyCustomToolset.

<msbuildToolsets default="MyCustomToolset">
   <toolset toolsVersion="MyCustomToolset">
      <property name="MSBuildToolsPath"
        value="C:\SpecialPath" />
   </toolset>
</msbuildToolsets>

<msbuildToolsets> doit également être défini comme suit dans le fichier de configuration.

<configSections>
   <section name="msbuildToolsets"
       type="Microsoft.Build.BuildEngine.ToolsetConfigurationSection,
       Microsoft.Build, Version=15.1.0.0, Culture=neutral,
       PublicKeyToken=b03f5f7f11d50a3a">
   </section>
</configSections>

Notes

Pour que la lecture se fasse correctement, <configSections> doit être la première sous-section de la section <configuration>.

ToolsetConfigurationSection est une section de configuration personnalisée qui peut être utilisée par n’importe quel hôte MSBuild pour une configuration personnalisée. Si vous utilisez un ensemble d’outils personnalisé, un hôte n’a rien à faire pour initialiser le moteur de génération, sauf fournir les entrées du fichier de configuration.

Les propriétés suivantes sont spécifiques à la valeur de ToolsVersion qui est utilisée dans les projets :

  • $(MSBuildBinPath) est défini sur la valeur de ToolsPath qui est spécifiée dans le Registre ou dans le fichier de configuration où ToolsVersion est définie. Le paramètre $(MSBuildToolsPath) dans le Registre ou dans le fichier de configuration spécifie l’emplacement des tâches et des cibles principales. Dans le fichier projet, ceci correspond à la propriété $(MSBuildBinPath) et à la propriété $(MSBuildToolsPath).

  • $(MSBuildToolsPath) est une propriété réservée qui est fournie par la propriété MSBuildToolsPath spécifiée dans le fichier de configuration. (Cette propriété remplace $(MSBuildBinPath). Toutefois, $(MSBuildBinPath) est conservé pour des raisons de compatibilité.) Un ensemble d’outils personnalisé doit définir $(MSBuildToolsPath) ou $(MSBuildBinPath), mais pas les deux, sauf s’ils ont tous les deux la même valeur.

    Vous pouvez également ajouter des propriétés personnalisées spécifiques à ToolsVersion au fichier de configuration, en utilisant la même syntaxe que celle utilisée pour ajouter la propriété MSBuildToolsPath. Pour rendre ces propriétés personnalisées disponibles pour le fichier projet, utilisez le même nom que celui de la valeur spécifiée dans le fichier de configuration. Dans le fichier de configuration, il est possible de définir des ensembles d’outils, mais pas des sous-ensembles d’outils.