Écraser les paramètres ToolsVersion
L’attribut ToolsVersion
sur l’élément Project dans les fichiers projet Visual Studio et MSBuild est considéré comme obsolète dans Visual Studio 2019 et versions ultérieures. Vous pouvez le supprimer sans problème. Cet article décrit son utilisation dans les versions antérieures de MSBuild ou pour les ensembles d’outils personnalisés. Consultez Configurations standard et personnalisées de l’ensemble d’outils.
Vous pouvez changer l’ensemble d’outils pour les projets et les solutions de trois manières :
Avec le commutateur
-ToolsVersion
(ou-tv
en abrégé) lors de la génération du projet ou de la solution en ligne de commande.En définissant le paramètre
ToolsVersion
sur la tâche MSBuild.En définissant la propriété
$(ProjectToolsVersion)
sur un projet dans une solution. Cela vous permet de générer un projet dans une solution avec une version de l’Ensemble d’outils qui diffère de celle des autres projets.
Écraser les paramètres ToolsVersion de projets et de solutions sur des générations en ligne de commande
Bien que les projets Visual Studio soient généralement générés avec la version ToolsVersion spécifiée dans le fichier projet, vous pouvez utiliser le commutateur -ToolsVersion
(ou -tv
) sur la ligne de commande pour substituer cette valeur et générer tous les projets et leurs dépendances projet-à-projet avec un autre Ensemble d’outils. Par exemple :
msbuild.exe someproj.proj -tv:12.0 -p:Configuration=Debug
Dans cet exemple, tous les projets sont générés à l’aide de ToolsVersion 12.0. (Voir cependant la section Ordre de priorité plus loin dans cette rubrique.)
Quand vous utilisez le commutateur -tv
sur la ligne de commande, vous pouvez éventuellement utiliser la propriété $(ProjectToolsVersion)
dans des projets pour les générer avec une autre valeur de ToolsVersion que les autres projets dans la solution.
Écraser les paramètres ToolsVersion avec le paramètre ToolsVersion de la tâche MSBuild
La tâche MSBuild est le moyen principal par lequel un projet peut en générer un autre. Pour permettre à la tâche MSBuild de générer un projet avec des paramètres ToolsVersion différents de ceux spécifiés dans le projet, un paramètre de tâche facultatif nommé ToolsVersion
est disponible. L’exemple suivant illustre comment utiliser ce paramètre :
Créez un fichier nommé projectA.proj et contenant le code suivant :
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0"> <Target Name="go" > <Message Text="projectA.proj" /> <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" /> <Message Text="MSBuildToolsPath: $(MSBuildToolsPath)" /> <MSBuild Projects="projectB.proj" ToolsVersion="2.0" Targets="go" /> </Target> </Project>
Créez un autre fichier nommé projectB.proj et contenant le code suivant :
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0"> <Target Name="go"> <Message Text="projectB.proj" /> <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" /> <Message Text="MSBuildToolsPath: $(MSBuildToolsPath)" /> </Target> </Project>
À l’invite de commandes, tapez la commande suivante :
msbuild projectA.proj -t:go -toolsversion:3.5
La sortie suivante apparaît. Pour
projectA
, le paramètre-toolsversion:3.5
de la ligne de commande remplace le paramètreToolsVersion=12.0
dans la baliseProject
.ProjectB
est appelé par une tâche dansprojectA
. Cette tâche aToolsVersion=2.0
, qui remplace les autres paramètresToolsVersion
pourprojectB
.Output: projectA.proj MSBuildToolsVersion: 3.5 MSBuildToolsPath: C:\Windows\Microsoft.NET\Framework\v3.5 projectB.proj MSBuildToolsVersion: 2.0 MSBuildToolsPath: C:\Windows\Microsoft.NET\Framework\v2.0.50727
Ordre de priorité
L’ordre de priorité, du plus élevé au plus bas, utilisé pour déterminer ToolsVersion
est le suivant :
L’attribut
ToolsVersion
sur la tâche MSBuild utilisé pour générer le projet, le cas échéant.Le commutateur
-toolsversion
(ou-tv
) utilisé dans la commande msbuild.exe, le cas échéant.Si la variable d’environnement
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
est définie, utiliser le paramètreToolsVersion
actuel.Si la variable d’environnement
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
est définie et que la valeur deToolsVersion
définie dans le fichier projet est supérieure à la valeur actuelle deToolsVersion
, utiliser la valeur actuelle deToolsVersion
.Si la variable d’environnement
MSBUILDLEGACYDEFAULTTOOLSVERSION
est définie, ou siToolsVersion
n’est pas défini, l’ordre de priorité est le suivant :L’attribut
ToolsVersion
de l’élément Project du fichier projet. Si cet attribut n’existe pas, il est supposé être égal à la version actuelle.La version des outils par défaut dans le fichier MSBuild.exe.config.
La version des outils par défaut dans le Registre. Pour plus d’informations, voir Configurations standard et personnalisées des ensembles d’outils.
Si la variable d’environnement
MSBUILDLEGACYDEFAULTTOOLSVERSION
n’est pas définie, l’ordre de priorité est le suivant :Si la variable d’environnement
MSBUILDDEFAULTTOOLSVERSION
est définie sur uneToolsVersion
qui existe, elle est utilisée.Si
DefaultOverrideToolsVersion
est défini dans MSBuild.exe.config, il est utilisé.Si
DefaultOverrideToolsVersion
est défini dans le Registre, il est utilisé.Sinon, utilisez la valeur actuelle de
ToolsVersion
.