Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein MSBuild-Toolset enthält eine Datei "microsoft.common.tasks ", eine Datei "microsoft.common.targets " und Compiler wie csc.exe und vbc.exe. Die meisten Toolsets können verwendet werden, um Anwendungen auf mehr als eine Version von .NET Framework und mehr als einer Systemplattform zu kompilieren. Das MSBuild 2.0-Toolset kann jedoch nur für .NET Framework 2.0 verwendet werden.
Das MSBuild-Attribut ToolsVersion für das Project-Element in Visual Studio- und MSBuild-Projektdateien gilt als veraltet in Visual Studio 2019 und höher. Sie können es sicher löschen. In diesem Artikel wird die Verwendung in älteren Versionen von MSBuild oder für benutzerdefinierte Toolsets beschrieben. Siehe Standard- und benutzerdefinierte Toolsetkonfigurationen.
ToolsVersion-Attribut
Geben Sie das Toolset im ToolsVersion Attribut für das Project-Element in der Projektdatei an. Im folgenden Beispiel wird angegeben, dass das Projekt mithilfe des MSBuild-Toolsets "Current" erstellt werden soll.
<Project ToolsVersion="Current" ... </Project>
Hinweis
Einige Projekttypen verwenden das sdk Attribut anstelle von ToolsVersion. Weitere Informationen finden Sie unter Ergänzungen zum csproj-Format für .NET Core.
Funktionsweise des ToolsVersion-Attributs
Wenn Sie ein Projekt in Visual Studio erstellen oder ein vorhandenes Projekt aktualisieren, wird automatisch ein Attribut mit dem Namen ToolsVersion in der Projektdatei enthalten, und der Wert entspricht der Version von MSBuild, die in der Visual Studio-Edition enthalten ist. Weitere Informationen finden Sie unter Framework-Zieladressierungsübersicht.
Wenn ein ToolsVersion Wert in einer Projektdatei definiert ist, verwendet MSBuild diesen Wert, um die Werte der Toolset-Eigenschaften zu bestimmen, die für das Projekt verfügbar sind. Eine Toolset-Eigenschaft ist $(MSBuildToolsPath), die den Pfad der .NET Framework-Tools angibt. Nur die Toolset-Eigenschaft (oder $(MSBuildBinPath)) ist erforderlich.
Ab Visual Studio 2013 ist die MSBuild Toolset-Version identisch mit der Versionsnummer von Visual Studio. MSBuild verwendet dieses Toolset in Visual Studio und in der Befehlszeile, unabhängig von der in der Projektdatei angegebenen Toolset-Version. Dieses Verhalten kann mithilfe des -ToolsVersion Flags überschrieben werden. Weitere Informationen finden Sie unter Überschreiben von ToolsVersion-Einstellungen.
Im folgenden Beispiel findet MSBuild die Datei "Microsoft.CSharp.targets " mithilfe der MSBuildToolsPath reservierten Eigenschaft.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Sie können den Wert MSBuildToolsPath ändern, indem Sie ein benutzerdefiniertes Toolset definieren. Weitere Informationen finden Sie unter Standard- und benutzerdefinierte Toolsetkonfigurationen.
Wenn Sie eine Projektmappe auf der Befehlszeile erstellen und eine ToolsVersion für msbuild.exeangeben, werden alle Projekte und deren Projekt-zu-Projekt-Abhängigkeiten entsprechend ToolsVersionerstellt, auch wenn jedes Projekt in der Lösung seine eigene ToolsVersionangibt. Informationen zum Definieren des ToolsVersion Werts pro Projekt finden Sie unter Überschreiben von ToolsVersion-Einstellungen.
Das ToolsVersion Attribut wird auch für die Projektmigration verwendet. Wenn Sie beispielsweise ein Visual Studio 2008-Projekt in Visual Studio 2010 öffnen, wird die Projektdatei aktualisiert, um ToolsVersion="4.0" einzuschließen. Wenn Sie dann versuchen, dieses Projekt in Visual Studio 2008 zu öffnen, erkennt es das upgrade ToolsVersion nicht und erstellt daher das Projekt so, als ob das Attribut noch auf 3.5 festgelegt wurde.
Visual Studio 2010 und Visual Studio 2012 verwenden eine ToolsVersion von 4.0. Visual Studio 2013 verwendet eine ToolsVersion von 12.0. Visual Studio 2015 verwendet ToolsVersion 14.0, und Visual Studio 2017 verwendet ToolsVersion 15.0. In vielen Fällen können Sie das Projekt ohne Änderung in mehreren Versionen von Visual Studio öffnen. Visual Studio verwendet immer das richtige Toolset, Sie werden jedoch benachrichtigt, wenn die verwendete Version nicht mit der Version in der Projektdatei übereinstimmt. In fast allen Fällen ist diese Warnung gutartig, da die Toolsets in den meisten Fällen kompatibel sind.
Untertoolsets, die weiter unten in diesem Thema beschrieben werden, ermöglichen MSBuild, automatisch zu wechseln, welche Tools basierend auf dem Kontext, in dem der Build ausgeführt wird. Beispielsweise verwendet MSBuild einen neueren Satz von Tools, wenn sie in Visual Studio 2012 ausgeführt wird, als wenn sie in Visual Studio 2010 ausgeführt wird, ohne dass Sie die Projektdatei explizit ändern müssen.
Toolsetimplementierung
Implementieren Sie ein Toolset, indem Sie die Pfade der verschiedenen Tools, Ziele und Aufgaben auswählen, aus denen das Toolset besteht. Die Tools im Toolset, das MSBuild definiert, stammen aus den folgenden Quellen:
Der Ordner .NET Framework.
Zusätzliche verwaltete Tools.
Zu den verwalteten Tools gehören ResGen.exe und TlbImp.exe.
MSBuild bietet zwei Möglichkeiten für den Zugriff auf das Toolset:
Mithilfe von Toolset-Eigenschaften
Mithilfe von ToolLocationHelper Methoden
Toolset-Eigenschaften geben die Pfade der Tools an. Ab Visual Studio 2017 verfügt MSBuild nicht mehr über einen festen Speicherort. Standardmäßig befindet es sich im Ordner "MSBuild\15.0\Bin " relativ zum Visual Studio-Installationsspeicherort. In früheren Versionen verwendet MSBuild den Wert des ToolsVersion Attributs in der Projektdatei, um den entsprechenden Registrierungsschlüssel zu suchen, und verwendet dann die Informationen im Registrierungsschlüssel, um die Toolset-Eigenschaften festzulegen. Wenn ToolsVersion beispielsweise der Wert 12.0vorhanden ist, legt MSBuild die Toolset-Eigenschaften gemäß diesem Registrierungsschlüssel fest: HKLM\Software\Microsoft\MSBuild\ToolsVersions\12.0.
Dies sind Toolset-Eigenschaften:
MSBuildToolsPathGibt den Pfad der MSBuild-Binärdateien an.SDK40ToolsPathGibt den Pfad zusätzlicher verwalteter Tools für MSBuild 4.x an (dies kann 4.0 oder 4.5 sein).SDK35ToolsPathGibt den Pfad zusätzlicher verwalteter Tools für MSBuild 3.5 an.
Alternativ können Sie das Toolset programmgesteuert ermitteln, indem Sie die Methoden der ToolLocationHelper Klasse aufrufen. Die Klasse enthält die folgenden Methoden:
GetPathToDotNetFramework gibt den Pfad des .NET Framework-Ordners zurück.
GetPathToDotNetFrameworkFile gibt den Pfad einer Datei im Ordner .NET Framework zurück.
GetPathToDotNetFrameworkSdk gibt den Pfad des Ordners für verwaltete Tools zurück.
GetPathToDotNetFrameworkSdkFile gibt den Pfad einer Datei zurück, die sich in der Regel im Ordner "verwaltete Tools" befindet.
GetPathToBuildTools gibt den Pfad der Buildtools zurück.