Festlegen einer bestimmten .NET Framework-Version als Ziel mit MSBuild

Aktualisiert: November 2007

Mit Visual Studio 2008 und MSBuild 3.5 können Sie mehrere Versionen von .NET Framework (Versionen 2.0, 3.0 und 3.5) beim Erstellen von Projekten als Ziel festlegen. Dieses Feature wird als Multi-Targeting bezeichnet. In MSBuild wird Multi-Targeting durch die Verwendung eines neuen Attributs mit der Bezeichnung ToolsVersion in Project-Element (MSBuild) erzielt.

Toolsets, Zielframeworks und ToolsVersion

Um zu verstehen, wie MSBuild mit Visual Studio 2008 zusammenarbeitet, müssen Sie den Unterschied zwischen einem Toolset und einem Zielframework kennen und wissen, wie sich diese jeweils zum neuen ToolsVersion-Attribut verhalten. Diese Elemente werden verwendet, um festzulegen, wie MSBuild 3.5 Projekte erstellt.

Toolset

Ein Toolset ist ein abgestimmter Satz von MSBuild-Aufgaben, MSBuild-Zielen und Tools, das zusammen mit MSBuild und .NET Framework installiert wird. Ein Toolset umfasst Compiler wie csc.exe und vbc.exe, die Datei mit allgemeinen Zielen (microsoft.common.targets) und die Datei mit allgemeinen Aufgaben (microsoft.common.tasks). Das 3.5-Toolset kann mit den Zielversionen 2.0 und 3.0 von .NET Framework verwendet werden. Das 2.0-Toolset kann nur mit der Zielversion 2.0 von .NET Framework verwendet werden.

Visual Studio 2008 installiert .NET Framework 3.5 mit zwei vordefinierten Toolsets: Eines für .NET Framework 2.0 und eines für .NET Framework 3.5. Für .NET Framework 3.0, das in Windows Vista enthalten ist, ist kein Toolset definiert. Das .NET Framework 2.0-Toolset kann nur .NET Framework 2.0 als Ziel festlegen, wobei das .NET Framework 3.5-Toolset die .NET Framework-Versionen 2.0, 3.0 oder 3.5 als Ziel festlegen kann.

Sie können außerdem eigene, benutzerdefinierte Toolsets erstellen. Weitere Informationen finden Sie unter Standardmäßige und benutzerdefinierte Toolsetkonfigurationen.

Zielframework

Ein Zielframework ist eine bestimmte Version von .NET Framework, auf der das Projekt ausgeführt werden kann. Es ist erforderlich, da es Compilerfeatures aktiviert, die nur für diese Version von .NET Framework 2.0 gelten, oder da es auf Assemblys verweist, die nur im Lieferumfang dieser Version des Frameworks enthalten sind.

Zurzeit stehen drei .NET Framework-Versionen zur Verwendung in Visual Studio 2008 zur Verfügung:

  • .NET Framework 2.0 (in Visual Studio enthalten).

  • .NET Framework 3.0 (in Windows Vista enthalten).

  • .NET Framework 3.5 (in Visual Studio 2008 enthalten).

Die drei unterschiedlichen .NET Framework-Versionen basieren alle auf der gleichen zugrunde liegenden Common Language Runtime (CLR)-Version 2.0, die in Visual Studio 2005 enthalten ist.

Die Version des Zielframeworks wird in der Projektdatei durch die TargetFrameworkVersion-Eigenschaft angegeben. Visual Studio legt diesen Wert fest, wenn Sie mit der integrierten Entwicklungsumgebung (IDE) die Version des Zielframeworks ändern. (Weitere Informationen finden Sie unter Gewusst wie: Festlegen eines bestimmtes .NET Framework-Ziels.) Mögliche Werte für TargetFrameworkVersion sind v2.0, v3.0 und v3.5. Er wird als MSBuild-Eigenschaft angegeben, zum Beispiel:

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

ToolsVersion-Attribut

Die Toolsetversion kann mit dem ToolsVersion-Attribut in Project-Element (MSBuild) in der Projektdatei angegeben werden. Das folgende Beispiel gibt an, dass das Projekt mit dem 2.0-Toolset von .NET Framework 2.0 erstellt werden soll:

<Project ToolsVersion="2.0" ... </Project>

Wenn Sie eine Lösung oder ein Projekt über die Befehlszeile erstellen, führt das Festlegen einer Toolsversion für msbuild.exe dazu, dass alle Projekte und die Abhängigkeiten zwischen den Projekten entsprechend dieser Toolsversion erstellt werden. Dies geschieht auch dann, wenn jedes Projekt der Lösung in Project-Element (MSBuild) eine eigene Toolsversion angibt.

Unterschiede zwischen .NET Framework-Versionen

Alle drei Versionen von .NET Framework basieren auf Version 2.0 der CLR. Die Versionen von .NET Framework unterscheiden sich in der Assemblyliste, die Ihnen als Referenz für Projekte zur Verfügung gestellt werden. LINQ ist beispielsweise eine neue Technologie, die in Visual Studio 2008 enthalten ist. .NET Framework 3.5 ist die einzige Version von .NET Framework, die über LINQ-bezogene Assemblys verfügt. Daher können Sie LINQ nur verwenden, wenn das Projekt spezifisch auf .NET Framework 3.5 ausgerichtet ist. Ebenso ist Windows Presentation Foundation (WPF) in Windows Vista enthalten. Sie können nur dann WPF-Anwendungen erstellen, wenn das Projekt auf .NET Framework ab Version 3.0 von .NET Framework ausgerichtet ist.

Weitere Informationen finden Sie unter Standardmäßige und benutzerdefinierte Toolsetkonfigurationen.

So suchen Projekte Toolsets

Um ein Projekt zu erstellen, ist für Visual Studio 2008 ein Toolset erforderlich. MSBuild sucht anhand der $(MSBuildToolsPath)-Eigenschaft nach Zielen und Aufgaben. MSBuild findet zum Beispiel die Microsoft.CSharp.targets-Datei, indem eines der folgenden XML-Elemente verwendet wird:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

Microsoft.CSharp.targets ist ein Beispiel für einen sprachspezifischen Buildprozess, der von Visual Studio 2008 zum Erstellen von Visual C#-Projekten verwendet wird. $(MSBuildToolsPath) wird in den Pfad der entsprechenden Version von .NET Framework aufgelöst, wobei Microsoft.CSharp.targets installiert wird (z. B. C:\Windows\Microsoft.Net\Framework\v2.0.50727).

Bevor das 3.5-Toolset von MSBuild dieses Projekt erstellen kann, muss $(MSBuildToolsPath) in das Installationsverzeichnis von MSBuild 3.5 aufgelöst werden, sodass das Toolset die Visual Studio 2008-Version von Microsoft.CSharp.targets importiert.

Abhängig von der Toolsversion ruft $(MSBuildToolsPath) einen anderen Wert ab, sodass ein anderes Toolset basierend auf dem ToolsVersion-Wert importiert wird. Dieses flexible System ermöglicht dem Projekt, dem MSBuild-Host oder dem Benutzer, das Toolset festzulegen, mit dem das Projekt erstellt werden soll. Außerdem kann festgelegt werden, wie MSBuild die Speicherortdaten zum Auswählen des richtigen Toolsets verwendet.

So funktioniert das ToolsVersion-Attribut

Wenn Sie ein neues Projekt erstellen oder ein vorhandenes Projekt in Visual Studio 2008 aktualisieren, wird ein Attribut mit dem Namen ToolsVersion automatisch in die Projektdatei aufgenommen und auf den Standardwert "3.5" festgelegt. Weitere Informationen finden Sie unter Festlegen eines bestimmten .NET Framework als Ziel.

Wenn in einer Projektdatei ein ToolsVersion-Wert definiert ist, wird dieser von MSBuild zum Ermitteln der Werte für $(MSBuildToolsPath) (oder $(MSBuildBinPath)) verwendet, wobei es sich um den Pfad der MSBuild-Tools handelt. Wenn kein ToolsVersion-Wert definiert ist, verwendet MSBuild weiterhin den alten Toolsetpfad, da davon ausgegangen wird, dass es sich um ein Visual Studio 2005-Projekt handelt.

Wenn Sie ein vorhandenes Visual Studio 2005-Projekt in Visual Studio 2008 öffnen, wird das Projekt physisch "aktualisiert", sodass es "ToolsVersion=3.5" enthält, da Visual Studio 2008 nur die Erstellung mit einem Toolset der Version 3.5 unterstützt. Dies hat zur Folge, dass beim Erstellen eines Projekts in Visual Studio 2008 das Visual Studio 2008-Toolset (3.5) statt des Visual Studio-Toolsets (2.0) verwendet wird.

Mit dem 2.0-Toolset erstellte Projekte können auf .NET Framework 2.0 ausgerichtet sein, und mit dem 3.5-Toolset erstellte Projekte können auf die Versionen 2.0, 3.0 oder 3.5 von .NET Framework ausgerichtet sein. Auch wenn ein Visual Studio-Projekt zu Visual Studio 2008 migriert und für die Verwendung des 3.5-Toolsets aktualisiert wurde, ist das Zielframework für das Projekt weiterhin .NET Framework 2.0. Hierdurch wird gewährleistet, dass beim Migrieren des Projekts zu Visual Studio 2008 keine neuen Abhängigkeiten erzeugt werden. Das Projekt wird genau wie in Visual Studio erstellt.

Hinweis:

Wenn ToolsVersion bereits in einem Projekt definiert ist, ändert Visual Studio 2008 den Wert nicht. Der ToolsVersion-Wert kann überschrieben werden. Weitere Informationen finden Sie unter Überschreiben von ToolsVersion-Einstellungen.

Visual Studio 2005- und MSBuild 3.5-Kompatibilität

Visual Studio 2005 kann Visual Studio 2008-Projekte oder auf Visual Studio 2008 aktualisierte Projekte nicht öffnen oder erstellen. Das 2.0-Toolset von MSBuild kann jedoch möglicherweise Visual Studio 2008-Projekte erstellen, wenn Sie keine neuen Funktionen verwendet haben, die für das Visual Studio 2008-Toolset spezifisch sind, wie z. B. LINQ, neue Visual C# 2008-Syntaxfeatures oder Visual Basic 2008-Syntaxfeatures usw.

Siehe auch

Konzepte

Überschreiben von ToolsVersion-Einstellungen

Standardmäßige und benutzerdefinierte Toolsetkonfigurationen