Überschreiben von ToolsVersion-Einstellungen
Das ToolsVersion
-Attribut für das Project-Element in Visual Studio und MSBuild-Projektdateien gilt in Visual Studio 2019 und höher als veraltet. Sie können es sicher löschen. In diesem Artikel wird die Verwendung in älteren Versionen von MSBuild oder für benutzerdefinierte Toolsets beschrieben. Weitere Informationen finden Sie unter Standardmäßige und benutzerdefinierte Toolsetkonfigurationen.
Sie können das Toolset für Projekte und Projektmappen auf drei verschiedene Arten ändern:
durch Verwendung des
-ToolsVersion
-Schalters (oder kurz-tv
) beim Erstellen des Projekts oder der Projektmappe in der Befehlszeile.durch Verwendung des
ToolsVersion
-Parameters in der MSBuild-Aufgabe.durch Festlegen der
$(ProjectToolsVersion)
-Eigenschaft für ein Projekt in einer Projektmappe. So können Sie ein Projekt in einer Projektmappe mit einer anderen Toolsetversion erstellen als der, die in anderen Projekten verwendet wird.
Überschreiben der ToolsVersion-Einstellungen von Projekten und Projektmappen in Befehlszeilenbuilds
Obwohl Visual Studio-Projekte normalerweise mit der in der Projektdatei angegebenen ToolsVersion erstellt werden, können Sie den Schalter -ToolsVersion
(oder -tv
) in der Befehlszeile verwenden, um diesen Wert zu überschreiben und so alle Projekte und deren projektübergreifende Abhängigkeiten mit einem anderen Toolset zu erstellen. Beispiel:
msbuild.exe someproj.proj -tv:12.0 -p:Configuration=Debug
In diesem Beispiel werden alle Projekte mit ToolsVersion 12.0 erstellt. (Siehe jedoch auch den Abschnitt Rangfolge weiter unten in diesem Thema.)
Bei Verwendung des -tv
-Schalters in der Befehlszeile können Sie optional die $(ProjectToolsVersion)
-Eigenschaft für einzelne Projekte verwenden, um diese mit einem anderen ToolsVersion-Wert als für andere Projekte in der Projektmappe zu erstellen.
Überschreiben der ToolsVersion-Einstellung mit dem ToolsVersion-Parameter der MSBuild-Aufgabe
Die MSBuild-Aufgabe dient einem Projekt primär dazu, ein anderes Projekt zu erstellen. Damit die MSBuild-Aufgabe ein Projekt mit einer anderen ToolsVersion als der im Projekt angegebenen erstellen kann, stellt sie einen optionalen Aufgabenparameter mit dem Namen ToolsVersion
zur Verfügung. Im folgenden Beispiel wird die Verwendung dieses Parameters veranschaulicht:
Erstellen Sie eine Datei namens projectA.proj, die den folgenden Code enthält:
<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>
Erstellen Sie eine weitere Datei namens projectB.proj, die den folgenden Code enthält:
<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>
Geben Sie an einer Eingabeaufforderung den folgenden Befehl ein:
msbuild projectA.proj -t:go -toolsversion:3.5
Die folgende Ausgabe wird angezeigt. Bei
projectA
überschreibt die-toolsversion:3.5
-Einstellung in der Befehlszeile dieToolsVersion=12.0
-Einstellung imProject
-Tag.ProjectB
wird durch eine Aufgabe inprojectA
aufgerufen. Diese Aufgabe enthält dieToolsVersion=2.0
, die die anderenToolsVersion
-Einstellungen fürprojectB
überschreibt.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
Rangfolge
Die Rangfolge, vom Höchsten zum Niedrigsten, mit der ToolsVersion
bestimmt wird, ist:
Das
ToolsVersion
-Attribut in der MSBuild-Aufgabe, die zum Erstellen des Projekts verwendet wird (soweit zutreffend).Der Schalter
-toolsversion
(oder-tv
), der im msbuild.exe-Befehl verwendet wird, falls vorhanden.Wenn die Umgebungsvariable
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
festgelegt ist, verwenden Sie die aktuelleToolsVersion
.Wenn die Umgebungsvariable
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
festgelegt ist und die in der Projektdatei definierteToolsVersion
größer als die aktuelleToolsVersion
ist, verwenden Sie die aktuelleToolsVersion
.Wenn die Umgebungsvariable
MSBUILDLEGACYDEFAULTTOOLSVERSION
festgelegt ist oder wennToolsVersion
nicht festgelegt ist, werden die folgenden Schritte verwendet:Das Attribut
ToolsVersion
des Project-Elements der Projektdatei. Wenn dieses Attribut nicht vorhanden ist, wird angenommen, dass es sich um die aktuelle Version handelt.Die standardmäßige Toolsversion in der MSBuild.exe.config-Datei.
Die standardmäßige Toolsversion in der Registrierung. Weitere Informationen finden Sie unter Standardmäßige und benutzerdefinierte Toolsetkonfigurationen.
Wenn die Umgebungsvariable
MSBUILDLEGACYDEFAULTTOOLSVERSION
nicht festgelegt ist, werden die folgenden Schritte verwendet:Wenn die Umgebungsvariable
MSBUILDDEFAULTTOOLSVERSION
auf eine vorhandeneToolsVersion
festgelegt ist, verwenden Sie diese Version.Wenn
DefaultOverrideToolsVersion
in MSBuild.exe.config festgelegt ist, verwenden Sie diese Version.Wenn
DefaultOverrideToolsVersion
in der Registrierung festgelegt ist, verwenden Sie diese Version.Andernfalls verwenden Sie die aktuelle
ToolsVersion
.