Zielframeworks

Wenn Sie ein Framework in einer App oder Bibliothek als Ziel verwenden, geben Sie mehrere APIs an, die Sie für die App oder Bibliothek verfügbar machen möchten. Sie geben das Zielframework mit Zielframeworkmonikers (TFMs) in Ihrer Projektdatei an.

Eine App oder Bibliothek kann eine Version des .NET Standards als Ziel verwenden. .NET Standard-Versionen stellen standardisierte APIs in allen .NET-Implementierungen dar. Eine Bibliothek kann z.B. NET Standard 1.6 als Ziel verwenden und Zugriff auf APIs erhalten, die sowohl in .NET Core und .NET Framework mit der gleichen Codebasis funktionieren.

Eine App oder Bibliothek kann auch eine spezifische .NET-Implementierung als Ziel verwenden, um Zugriff auf implementierungsspezifische APIs zu erhalten. Eine App, die beispielsweise Xamarin.iOS als Ziel verwendet (z.B. Xamarin.iOS10), erhält Zugriff auf von Xamarin bereitgestellte API-Wrapper für iOS 10, und eine App, die die universelle Windows-Plattform (UWP, uap10.0) als Ziel verwendet, erhält Zugriff auf APIs, die für Geräte kompilieren, die unter Windows 10 ausgeführt werden.

Für einige Zielplattformen (z.B. .NET Framework) werden die APIs von den Assemblys definiert, die das Framework auf einem System installiert, und zu denen möglicherweise Anwendungsframework-APIs zählen (z.B. ASP.NET).

Für paketbasierte Zielframeworks (z.B. .NET Standard und .NET Core) werden die APIs von den Paketen definiert, die in der App oder der Bibliothek enthalten sind. Ein Metapaket ist ein NuGet-Paket ohne eigenen Inhalt, das aus einer Liste von Abhängigkeiten oder Paketen besteht. Ein Zielframework, das auf einem NuGet-Paket basiert, gibt implizit ein Metapaket an, das auf alle Pakete verweist, aus denen das Framework besteht.

Neueste Zielframeworkversionen

Die folgende Tabelle listet die häufigsten Zielframeworks auf, wie auf diese verwiesen wird und welche Version von .NET Standard von ihnen implementiert wird. Diese Zielframeworkversionen sind die neuesten stabilen Versionen. Vorabversionen werden nicht angezeigt. Ein TFM ist ein standardisiertes Tokenformat zum Angeben des Zielframeworks einer .NET-App oder -Bibliothek.

Zielframework Letzte Version Zielframeworkmoniker (Target Framework Moniker, TFM) .NET-Standardversion Metapaket
.NET-Standard 2.0.0 netstandard2.0 Nicht zutreffend NETStandard.Library
.NET Core-Anwendung 2.0.0 netcoreapp2.0 2.0 Microsoft.NETCore.App
.NET Framework 4.7 net47 1.5 Nicht zutreffend

Unterstützte Zielframeworkversionen

Auf ein Zielframework wird normalerweise mit einem TFM verwiesen. In der folgenden Tabelle werden die vom .NET Core SDK und dem NuGet-Client unterstützten Zielframeworks aufgelistet. Äquivalente werden in Klammern angegeben. win81 ist z.B ein äquivalenter TFM von netcore451.

Zielframework TFM
.NET-Standard netstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
.NET Core netcoreapp1.0
netcoreapp1.1
netcoreapp2.0
.NET Framework net11
net20
net35
net40
net403
net45
net451
net452
net46
net461
net462
net47
Windows Store netcore [netcore45]
netcore45 [win] [win8]
netcore451 [win81]
.NET Micro Framework netmf
Silverlight sl4
sl5
Windows Phone wp [wp7]
wp7
wp75
wp8
wp81
wpa81
Universelle Windows-Plattform uap [uap10.0]
uap10.0 [win10] [netcore50]

Angeben von Zielframeworks

Zielframeworks geben Sie in Ihrer Projektdatei an. Wenn ein einzelnes Framework angegeben wird, verwenden Sie das Element TargetFramework. Die folgende Projektdatei einer Konsolen-App veranschaulicht, wie Sie .NET Core 2.0 als Ziel verwenden können:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

</Project>

Wenn Sie mehrere Zielframeworks angeben, können Sie bedingt auf Assemblys für jedes Zielframework verweisen. Sie können in Ihrem Code bedingt mit diesen Assemblys kompilieren, indem Sie die Präprozessorsymbole mit wenn-dann-sonst-Logik verwenden.

Die folgende Bibliotheksprojektdatei verwendet APIs von .NET Standard (netstandard1.4) und von .NET Framework (net40 und net45) als Ziel. Verwenden Sie das Element TargetFrameworks im Plural für mehrer Zielframeworks. Beachten Sie, dass die Condition-Attribute implementierungsspezifische Pakete enthalten, wenn die Bibliothek für die zwei .NET Framework-TFMs kompiliert wird:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard1.4;net40;net45</TargetFrameworks>
  </PropertyGroup>

  <!-- Conditionally obtain references for the .NET Framework 4.0 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
    <Reference Include="System.Net" />
  </ItemGroup>

  <!-- Conditionally obtain references for the .NET Framework 4.5 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Threading.Tasks" />
  </ItemGroup>

</Project>

Sie schreiben in Ihrer Bibliothek oder App bedingten zu kompilierenden Code für jedes Zielframework:

public class MyClass
{
    static void Main()
    {
#if NET40
        Console.WriteLine("Target framework: .NET Framework 4.0");
#elif NET45  
        Console.WriteLine("Target framework: .NET Framework 4.5");
#else
        Console.WriteLine("Target framework: .NET Standard 1.4");
#endif
    }
}

Das Buildsystem beachtet Präprozessorsymbole, die Zielframeworks darstellen, die in der Tabelle Unterstützte Zielframeworkversionen aufgelistet sind. Wenn Sie ein Symbol verwenden, das einen TFM von .NET Standard oder .NET Core darstellt, ersetzen Sie den Punkt (.) durch einen Unterstrich (_), und ändern Sie Klein- in Großbuchstaben (das Symbol für netstandard1.4 ist z.B. NETSTANDARD1_4).

Hier finden Sie eine vollständige Liste der Präprozessorsymbole für .NET Core-Zielframeworks:

Zielframeworks Symbole
.NET Framework NET20, NET35, NET40, NET45, NET451, NET452, NET46, NET461, NET462, NET47, NET471
.NET-Standard NETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0
.NET Core NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0

Veraltete Zielframeworks

Die folgenden Zielframeworks sind veraltet. Pakete, die für diese Zielframeworks ausgelegt sind, sollten zur jeweiligen Ersetzung migriert werden.

Veralteter TFM Ersetzung
aspnet50
aspnetcore50
dnxcore50
dnx
dnx45
dnx451
dnx452
netcoreapp
dotnet
dotnet50
dotnet51
dotnet52
dotnet53
dotnet54
dotnet55
dotnet56
netstandard
netcore50 uap10.0
win netcore45
win8 netcore45
win81 netcore451
win10 uap10.0
winrt netcore45

Siehe auch

Pakete, Metapakete und Frameworks
Entwickeln von Bibliotheken mit plattformübergreifenden Tools
.NET-Standard
.NET Core-Versionskontrolle
dotnet/standard-GitHub-Repository
GitHub-Repository NuGet-Tools)
Frameworkprofile in .NET