Zielframeworks in Projekten im SDK-FormatTarget frameworks in SDK-style projects

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.When you target a framework in an app or library, you're specifying the set of APIs that you'd like to make available to the app or library. Das Zielframework wird mithilfe von Zielframeworkmonikern (Target Framework Monikers, TFMs) in Ihrer Projektdatei angegeben.You specify the target framework in your project file using a target framework moniker (TFM).

Eine App oder Bibliothek kann eine Version des .NET Standards als Ziel verwenden.An app or library can target a version of .NET Standard. .NET Standard-Versionen stellen standardisierte APIs in allen .NET-Implementierungen dar..NET Standard versions represent standardized sets of APIs across all .NET implementations. 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.For example, a library can target .NET Standard 1.6 and gain access to APIs that function across .NET Core and .NET Framework using the same codebase.

Eine App oder Bibliothek kann auch eine spezifische .NET-Implementierung als Ziel verwenden, um Zugriff auf implementierungsspezifische APIs zu erhalten.An app or library can also target a specific .NET implementation to gain access to implementation-specific APIs. Eine App für Xamarin.iOS (z. B. Xamarin.iOS10) kann beispielsweise auf von Xamarin bereitgestellte API-Wrapper für iOS 10 zugreifen, während eine App, die für die universelle Windows-Plattform (UWP, uap10.0) entwickelt wurde, Zugriff auf APIs hat, die Code für Windows 10-Geräte kompilieren.For example, an app that targets Xamarin.iOS (for example, Xamarin.iOS10) has access to Xamarin-provided iOS API wrappers for iOS 10, or an app that targets Universal Windows Platform (UWP, uap10.0) has access to APIs that compile for devices that run Windows 10.

Für einige Zielframeworks (z. B. das .NET Framework) werden die APIs von den Assemblys definiert, die das Framework in einem System installiert. Zu diesen APIs können auch Anwendungsframework-APIs zählen (z. B. ASP.NET).For some target frameworks, such as .NET Framework, the APIs are defined by the assemblies that the framework installs on a system and may include application framework APIs (for example, ASP.NET).

Für paketbasierte Zielframeworks (z. B. .NET 5, .NET Core und .NET Standard) werden die APIs von den NuGet-Paketen definiert, die in der App oder der Bibliothek enthalten sind.For package-based target frameworks (for example, .NET 5, .NET Core, and .NET Standard), the APIs are defined by the NuGet packages included in the app or library.

Neueste VersionenLatest versions

In der folgenden Tabelle wird aufgelistet, wie die häufigsten Zielframeworks lauten, wie auf diese verwiesen wird und welche Version von .NET Standard sie implementieren.The following table defines the most common target frameworks, how they're referenced, and which version of .NET Standard they implement. Diese Zielframeworkversionen sind die neuesten stabilen Versionen.These target framework versions are the latest stable versions. Vorabversionen werden nicht angezeigt.Pre-release versions aren't shown. Ein TFM ist ein standardisiertes Tokenformat zum Angeben des Zielframeworks einer .NET-App oder -Bibliothek.A target framework moniker (TFM) is a standardized token format for specifying the target framework of a .NET app or library.

ZielframeworkTarget framework LatestLatest
Stabile Versionstable version
TFMTarget framework moniker (TFM) ImplementiertImplemented
.NET Standard-Version.NET Standard version
.NET 5.NET 5 5.05.0 net5.0net5.0 N/A
.NET Standard.NET Standard 2.12.1 netstandard2.1netstandard2.1 N/A
.NET Core.NET Core 3.13.1 netcoreapp3.1netcoreapp3.1 2.12.1
.NET Framework.NET Framework 4.84.8 net48net48 2,02.0

Unterstützte ZielframeworksSupported target frameworks

Auf ein Zielframework wird normalerweise mit einem TFM verwiesen.A target framework is typically referenced by a TFM. In der folgenden Tabelle werden die vom .NET SDK und dem NuGet-Client unterstützten Zielframeworks aufgelistet.The following table shows the target frameworks supported by the .NET SDK and the NuGet client. Äquivalente werden in Klammern angegeben.Equivalents are shown within brackets. win81 ist z.B ein äquivalenter TFM von netcore451.For example, win81 is an equivalent TFM to netcore451.

ZielframeworkTarget Framework TFMTFM
.NET 5 oder höher (und .NET Core).NET 5+ (and .NET Core) netcoreapp1.0netcoreapp1.0
netcoreapp1.1netcoreapp1.1
netcoreapp2.0netcoreapp2.0
netcoreapp2.1netcoreapp2.1
netcoreapp2.2netcoreapp2.2
netcoreapp3.0netcoreapp3.0
netcoreapp3.1netcoreapp3.1
net5.0
net6.0
net5.0
net6.0
.NET Standard.NET Standard netstandard1.0netstandard1.0
netstandard1.1netstandard1.1
netstandard1.2netstandard1.2
netstandard1.3netstandard1.3
netstandard1.4netstandard1.4
netstandard1.5netstandard1.5
netstandard1.6netstandard1.6
netstandard2.0netstandard2.0
netstandard2.1netstandard2.1
.NET Framework.NET Framework net11net11
net20net20
net35net35
net40net40
net403net403
net45net45
net451net451
net452net452
net46net46
net461net461
net462net462
net47net47
net471net471
net472net472
net48net48
Windows StoreWindows Store netcore [netcore45]netcore [netcore45]
netcore45 [win] [win8]netcore45 [win] [win8]
netcore451 [win81]netcore451 [win81]
.NET Micro Framework.NET Micro Framework netmfnetmf
SilverlightSilverlight sl4sl4
sl5sl5
Windows PhoneWindows Phone wp [wp7]wp [wp7]
wp7wp7
wp75wp75
wp8wp8
wp81wp81
wpa81wpa81
Universelle Windows-PlattformUniversal Windows Platform uap [uap10.0]uap [uap10.0]
uap10.0 [win10] [netcore50]uap10.0 [win10] [netcore50]

* Die TFMs in .NET 5 und höher enthalten einige betriebssystemspezifische Varianten.* .NET 5 and later TFMs include some operating system-specific variations. Weitere Informationen finden Sie im folgenden Abschnitt Betriebssystemspezifische TFMs in .NET 5 oder höher.For more information, see the following section, .NET 5+ OS-specific TFMs.

Betriebssystemspezifische TFMs in .NET 5 oder höher.NET 5+ OS-specific TFMs

Die net5.0- und net6.0-TFMs und enthalten Technologien, die auf verschiedenen Plattformen funktionieren.The net5.0 and net6.0 TFMs include technologies that work across different platforms. Das Angeben eines betriebssystemspezifischen TFM führt dazu, dass APIs für ein Betriebssystem spezifisch sind, das für Ihre App verfügbar ist, z. B. Windows Forms oder iOS-Bindungen.Specifying an OS-specific TFM makes APIs that are specific to an operating system available to your app, for example, Windows Forms or iOS bindings. Betriebssystemspezifische TFMs erben auch jede API, die für Ihren Basis-TFM verfügbar ist, z. B. den net5.0-TFM.OS-specific TFMs also inherit every API available to their base TFM, for example, the net5.0 TFM.

Mit .NET 5 wurde der betriebssystemspezifische net5.0-windows-TFM eingeführt, der Windows-spezifische Bindungen für WinForms-, WPF- und UWP-APIs umfasst..NET 5 introduced the net5.0-windows OS-specific TFM, which includes Windows-specific bindings for WinForms, WPF, and UWP APIs. Mit .NET 6 werden weitere betriebssystemspezifische TFMs eingeführt..NET 6 introduces further OS-specific TFMs.

Die folgende Tabelle zeigt die Kompatibilität der .NET 5-TFMs (oder höher).The following table shows the compatibility of the .NET 5+ TFMs.

TFMTFM Kompatibel mitCompatible with
net5.0net5.0 net1..4 (mit NU1701-Warnung)net1..4 (with NU1701 warning)
netcoreapp1..3.1 (Warnung bei Verweis auf WinForms oder WPF)netcoreapp1..3.1 (warning when WinForms or WPF is referenced)
netstandard1..2.1netstandard1..2.1
net5.0-windowsnet5.0-windows netcoreapp1..3.1 (plus alles Ererbte von net5.0)netcoreapp1..3.1 (plus everything else inherited from net5.0)
net6.0net6.0 (Nachfolgeversion von net5.0)(subsequent version of net5.0)
net6.0-androidnet6.0-android xamarin.android (und alles andere von net6.0 geerbte)xamarin.android (+everything else inherited from net6.0)
net6.0-iosnet6.0-ios xamarin.ios (und alles andere von net6.0 geerbte)xamarin.ios (+everything else inherited from net6.0)
net6.0-macosnet6.0-macos xamarin.mac (und alles andere von net6.0 geerbte)xamarin.mac (+everything else inherited from net6.0)
net6.0-maccatalystnet6.0-maccatalyst xamarin.ios (und alles andere von net6.0 geerbte)xamarin.ios (+everything else inherited from net6.0)
net6.0-tvosnet6.0-tvos xamarin.tvos (und alles andere von net6.0 geerbte)xamarin.tvos (+everything else inherited from net6.0)
net6.0-windowsnet6.0-windows (Nachfolgeversion von net5.0-windows)(subsequent version of net5.0-windows)

Damit Ihre App auf verschiedenen Plattformen genutzt werden kann, Zugriff auf betriebssystemspezifische APIs aber trotzdem möglich ist, können Sie als Ziel mehrere betriebssystemspezifische TFMs verwenden und Plattformwächter für betriebssystemspezifische API-Aufrufe hinzufügen, indem Sie #if-Präprozessoranweisungen nutzen.To make your app portable across different platforms but still have access to OS-specific APIs, you can target multiple OS-specific TFMs and add platform guards around OS-specific API calls using #if preprocessor directives.

Vorgeschlagene ZieleSuggested targets

Verwenden Sie diese Richtlinien, um zu bestimmen, welchen TFM Sie für Ihre App verwenden:Use these guidelines to determine which TFM to use in your app:

  • Apps, die für mehrere Plattformen genutzt werden können, sollten einen Basis-TFM (z. B. net5.0) als Ziel verwenden.Apps that are portable to multiple platforms should target a base TFM, for example, net5.0. Dazu gehören die meisten Bibliotheken, jedoch auch ASP.NET Core und Entity Framework.This includes most libraries but also ASP.NET Core and Entity Framework.

  • Plattformspezifische Bibliotheken sollten plattformspezifische Varianten als Ziel verwenden.Platform-specific libraries should target platform-specific flavors. WinForms- und WPF-Projekte sollten beispielsweise net5.0-windows oder net6.0-windows als Ziel verwenden.For example, WinForms and WPF projects should target net5.0-windows or net6.0-windows.

  • Plattformübergreifende Anwendungsmodelle (Xamarin Forms, ASP.NET Core) und Überbrückungspakete (Xamarin.Essentials) sollten mindestens den Basis-TFM (z. B. net6.0) als Ziel verwenden. Sie können aber auch zusätzliche plattformspezifische Varianten verwenden, um für weitere APIs oder Features nutzbar zu sein.Cross-platform application models (Xamarin Forms, ASP.NET Core) and bridge packs (Xamarin Essentials) should at least target the base TFM, for example, net6.0, but might also target additional platform-specific flavors to light-up more APIs or features.

Betriebssystemversion in TFMsOS version in TFMs

Sie können auch eine optionale Betriebssystemversion am Ende des TFM angeben, z. B. net6.0-ios13.0, die angibt, welche APIs für Ihre App verfügbar sind.You can also specify an optional OS version at the end of the TFM, for example, net6.0-ios13.0, which indicates what APIs are available to your app. (Das entsprechende .NET 5 SDK wird aktualisiert, sodass es auch neuere Betriebssystemversionen unterstützt, sobald diese veröffentlicht werden.) Wenn Sie Zugriff auf neu veröffentlichte APIs erhalten möchten, erhöhen Sie die Betriebssystemversion im TFM.(The corresponding .NET SDK will be updated to include support for newer OS versions as they are released.) To gain access to newly released APIs, increment the OS version in the TFM. Sie können weiterhin dafür sorgen, dass Ihre App mit älteren Betriebssystemversionen kompatibel ist (und Aufrufe für APIs mit älteren Versionen mit Wächtern umschließen), indem Sie das SupportedOSPlatformVersion-Element in Ihrer Projektdatei hinzufügen.You can still make your app compatible with earlier OS versions (and add guards around calls to later-version APIs) by adding the SupportedOSPlatformVersion element to your project file. Das SupportedOSPlatformVersion-Element weist auf die Betriebssystemmindestversion hin, die erforderlich ist, um Ihre App ausführen zu können.The SupportedOSPlatformVersion element indicates the minimum OS version required to run your app.

Im folgenden Ausschnitt aus einer Projektdatei wird beispielsweise angegeben, dass iOS 14-APIs für die App verfügbar sind, dass sie jedoch auch mit iOS 13 oder älteren Computern ausgeführt werden kann.For example, the following project file excerpt specifies that iOS 14 APIs are available to the app, but it can run on iOS 13 or later machines.

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

  <PropertyGroup>
    <TargetFramework>net6.0-ios14.0</TargetFramework>
    <SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion> (minimum os platform version)
  </PropertyGroup>

  ...

</Project>

Angeben eines ZielframeworksHow to specify a target framework

Zielframeworks werden in einer Projektdatei angegeben.Target frameworks are specified in a project file. Wenn ein einzelnes Zielframework angegeben wird, verwenden Sie das Element „TargetFramework“.When a single target framework is specified, use the TargetFramework element. Die folgende Projektdatei einer Konsolen-App veranschaulicht, wie Sie .NET 5.0 als Zielframework festlegen:The following console app project file demonstrates how to target .NET 5.0:

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

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

</Project>

Wenn Sie mehrere Zielframeworks angeben, können Sie bedingt auf Assemblys für jedes Zielframework verweisen.When you specify multiple target frameworks, you may conditionally reference assemblies for each target framework. Sie können in Ihrem Code bedingt mit diesen Assemblys kompilieren, indem Sie die Präprozessorsymbole mit wenn-dann-sonst-Logik verwenden.In your code, you can conditionally compile against those assemblies by using preprocessor symbols with if-then-else logic.

Die folgende Bibliotheksprojektdatei ist auf APIs von .NET Standard (netstandard1.4) und des .NET Framework (net40 und net45) ausgerichtet.The following library project targets APIs of .NET Standard (netstandard1.4) and .NET Framework (net40 and net45). Verwenden Sie das Element „TargetFrameworks“ im Plural für mehrere Zielframeworks.Use the plural TargetFrameworks element with multiple target frameworks. Die Condition-Attribute enthalten implementierungsspezifische Pakete, wenn die Bibliothek für die zwei .NET Framework-TFMs kompiliert wird:The Condition attributes include implementation-specific packages when the library is compiled for the two .NET Framework TFMs:

<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>

In Ihrer Bibliothek oder App schreiben Sie mithilfe von Präprozessoranweisungen Bedingungscode, um für die verschiedenen Zielframeworks zu kompilieren:Within your library or app, you write conditional code using preprocessor directives to compile for each target framework:

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 Projekte im SDK-Format verwenden.The build system is aware of preprocessor symbols representing the target frameworks shown in the Supported target framework versions table when you're using SDK-style projects. Wenn Sie ein Symbol verwenden, das einen .NET Standard-, .NET Core- oder .NET 5-TFM darstellt, ersetzen Sie Punkte und Bindestriche durch einen Unterstrich, und ändern Sie Klein- in Großbuchstaben (das Symbol für netstandard1.4 ist z. B. NETSTANDARD1_4).When using a symbol that represents a .NET Standard, .NET Core, or .NET 5 TFM, replace dots and hyphens with an underscore and change lowercase letters to uppercase (for example, the symbol for netstandard1.4 is NETSTANDARD1_4).

Hier finden Sie eine vollständige Liste der Präprozessorsymbole für .NET-Zielframeworks:The complete list of preprocessor symbols for .NET target frameworks is:

ZielframeworksTarget Frameworks SymboleSymbols
.NET Framework.NET Framework NETFRAMEWORK, NET48, NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, NET40, NET35, NET20NETFRAMEWORK, NET48, NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, NET40, NET35, NET20
.NET Standard.NET Standard NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1, NETSTANDARD1_0NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1, NETSTANDARD1_0
.NET 5 (und .NET Core).NET 5 (and .NET Core) NET, NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, NETCOREAPP2_0, NETCOREAPP1_1, NETCOREAPP1_0NET, NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, NETCOREAPP2_0, NETCOREAPP1_1, NETCOREAPP1_0

Veraltete ZielframeworksDeprecated target frameworks

Die folgenden Zielframeworks sind veraltet.The following target frameworks are deprecated. Pakete, die auf diese Zielframeworks ausgelegt sind, sollten in das jeweilige Nachfolgeframework migriert werden.Packages that target these target frameworks should migrate to the indicated replacements.

Veralteter TFMDeprecated TFM ErsetzungReplacement
aspnet50aspnet50
aspnetcore50aspnetcore50
dnxcore50dnxcore50
dnxdnx
dnx45dnx45
dnx451dnx451
dnx452dnx452
netcoreappnetcoreapp
dotnetdotnet
dotnet50dotnet50
dotnet51dotnet51
dotnet52dotnet52
dotnet53dotnet53
dotnet54dotnet54
dotnet55dotnet55
dotnet56dotnet56
netstandardnetstandard
netcore50netcore50 uap10.0uap10.0
winwin netcore45netcore45
win8win8 netcore45netcore45
win81win81 netcore451netcore451
win10win10 uap10.0uap10.0
winrtwinrt netcore45netcore45

Weitere InformationenSee also