.NET-Standard.NET Standard

.NET Standard ist eine formale Spezifikation von .NET-APIs, die für verschiedene .NET-Implementierungen verfügbar sind..NET Standard is a formal specification of .NET APIs that are available on multiple .NET implementations. Die Motivation hinter .NET Standard war es, mehr Einheitlichkeit im .NET-Ökosystem zu erreichen.The motivation behind .NET Standard was to establish greater uniformity in the .NET ecosystem. .NET 5 übernimmt jedoch einen anderen Ansatz, um diese Einheitlichkeit sicherzustellen. Durch diesen neuen Ansatz entfällt die Notwendigkeit von .NET Standard in vielen Szenarios.However, .NET 5 adopts a different approach to establishing uniformity, and this new approach eliminates the need for .NET Standard in many scenarios. Weitere Informationen finden Sie später in diesem Artikel unter .NET 5 und .NET Standard.For more information, see .NET 5 and .NET Standard later in this article.

Unterstützung der .NET-Implementierung.NET implementation support

Die verschiedenen .NET-Implementierungen verwenden spezifische Versionen von .NET Standard als Ziel.The various .NET implementations target specific versions of .NET Standard. Jede .NET-Implementierung kündigt die höchste .NET Standardversion an, die von ihr unterstützt wird, was bedeutet, dass sie auch frühere Versionen unterstützt.Each .NET implementation version advertises the highest .NET Standard version it supports, a statement that means it also supports previous versions. .NET Framework 4.6 implementiert z. B. .NET Standard 1.3 und stellt damit alle APIs bereit, die in den Versionen 1.0 bis 1.3 von .NET Standard definiert sind.For example, .NET Framework 4.6 implements .NET Standard 1.3, which means that it exposes all APIs defined in .NET Standard versions 1.0 through 1.3. Auf ähnliche Weise implementiert .NET Framework 4.6.1 .NET Standard 1.4, während .NET 5.0 .NET Standard 2.1 implementiert.Similarly, .NET Framework 4.6.1 implements .NET Standard 1.4, while .NET 5.0 implements .NET Standard 2.1.

In der folgenden Tabelle sind die mindestens erforderlichen Implementierungsversionen aufgeführt, die sämtliche .NET Standard-Versionen unterstützen.The following table lists the minimum implementation versions that support each .NET Standard version. Dies bedeutet, dass höhere Versionen einer aufgelisteten Implementierung auch die entsprechende Version von .NET Standard unterstützen.That means that later versions of a listed implementation also support the corresponding .NET Standard version. Beispielsweise unterstützen .NET Core 2.1 und höhere Versionen auch .NET Standard 2.0 und frühere Versionen.For example, .NET Core 2.1 and later versions support .NET Standard 2.0 and earlier versions.

.NET-Standard.NET Standard 1.01.0 1.11.1 1.21.2 1.31.3 1.41.4 1.51.5 1.61.6 2.02.0 2.12.1
.NET Core und .NET 5.NET Core and .NET 5 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 2.02.0 3.03.0
.NET Framework 1.NET Framework 1 4.54.5 4.54.5 4.5.14.5.1 4.64.6 4.6.14.6.1 4.6.1 24.6.1 2 4.6.1 24.6.1 2 4.6.1 24.6.1 2 Nicht zutreffend3N/A3
MonoMono 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 5.45.4 6.46.4
Xamarin.iOSXamarin.iOS 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.1410.14 12.1612.16
Xamarin.MacXamarin.Mac 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.83.8 5.165.16
Xamarin.AndroidXamarin.Android 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 8.08.0 10.010.0
Universelle Windows-PlattformUniversal Windows Platform 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.0.1629910.0.16299 10.0.1629910.0.16299 10.0.1629910.0.16299 Wird nachgeliefert.TBD
UnityUnity 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 Wird nachgeliefert.TBD

1 Die für .NET Frameworks aufgeführten Versionen gelten für das .NET Core 2.0 SDK und höhere Versionen des Tools. Ältere Versionen haben eine andere Zuordnung für .NET Standard 1.5 und höher verwendet. Sie können Tools für .NET Core-Tools für Visual Studio 2015 herunterladen, falls Sie kein Upgrade auf Visual Studio 2017 oder eine höhere Version durchführen können.1 The versions listed for .NET Framework apply to .NET Core 2.0 SDK and later versions of the tooling. Older versions used a different mapping for .NET Standard 1.5 and higher. You can download tooling for .NET Core tools for Visual Studio 2015 if you cannot upgrade to Visual Studio 2017 or a later version.

2 Die hier aufgelisteten Versionen stellen die Regeln dar, die von NuGet verwendet werden, um zu bestimmen, ob eine vorhandene .NET Standard-Bibliothek anwendbar ist. Zwar sieht NuGet die .NET-Standards 1.5 bis 2.0 als durch .NET Framework 4.6.1 unterstützt an, jedoch treten verschiedene Probleme mit der Nutzung von .NET Standard-Bibliotheken auf, die für diese Versionen aus .NET Framework 4.6.1-Projekten erstellt wurden. Für .NET Framework-Projekte, die auf diese Bibliotheken angewiesen sind, empfehlen wir, ein Upgrade des Projekts auf die Zielplattform .NET Framework 4.7.2 oder höher durchzuführen.2 The versions listed here represent the rules that NuGet uses to determine whether a given .NET Standard library is applicable. While NuGet considers .NET Framework 4.6.1 as supporting .NET Standard 1.5 through 2.0, there are several issues with consuming .NET Standard libraries that were built for those versions from .NET Framework 4.6.1 projects. For .NET Framework projects that need to use such libraries, we recommend that you upgrade the project to target .NET Framework 4.7.2 or higher.

3 .NET Standard 2.1 wird von .NET Framework nicht unterstützt. Weitere Informationen finden Sie in der Ankündigung von .NET Standard 2.1.3 .NET Framework doesn't support .NET Standard 2.1. For more information, see the announcement of .NET Standard 2.1.

  • Die Spalten stellen die .NET Standard-Versionen dar.The columns represent .NET Standard versions. Jede Zelle enthält einen Link zu einem Dokument, im dem die APIs angegeben sind, die in dieser Version von .NET Standard hinzugefügt wurden.Each header cell is a link to a document that shows which APIs got added in that version of .NET Standard.
  • Die Zeilen stellen die verschiedenen .NET-Implementierungen dar.The rows represent the different .NET implementations.
  • Die Versionsnummer in jeder Zelle gibt an, welche Version der Implementierung Sie mindestens benötigen, um diese Version von .NET Standard als Ziel zu setzen.The version number in each cell indicates the minimum version of the implementation you'll need in order to target that .NET Standard version.
  • Eine interaktive Tabelle finden Sie unter .NET Standard-Versionen.For an interactive table, see .NET Standard versions.

Führen Sie die folgenden Schritte aus, um die höchste Version von .NET Standard zu ermitteln, die Sie als Ziel verwenden können:To find the highest version of .NET Standard that you can target, do the following steps:

  1. Suchen Sie die Zeile, die die .NET-Implementierung angibt, die Sie ausführen möchten.Find the row that indicates the .NET implementation you want to run on.
  2. Suchen Sie in dieser Zeile die Spalte, in der Ihre Version angegeben ist (von rechts nach links).Find the column in that row that indicates your version starting from right to left.
  3. Die Spaltenüberschrift gibt die .NET Standard-Version an, die Ihr Ziel unterstützt.The column header indicates the .NET Standard version that your target supports. Sie können auch eine niedrigere .NET Standard-Version als Ziel verwenden.You may also target any lower .NET Standard version. Auch höhere .NET Standard-Versionen unterstützen die Implementierung.Higher .NET Standard versions will also support your implementation.
  4. Wiederholen Sie diesen Vorgang für jede Plattform, die als Ziel verwendet werden soll.Repeat this process for each platform you want to target. Wenn Sie mehrere Zielplattformen verwenden, sollten Sie die kleinste unterstützten Versionen auswählen.If you have more than one target platform, you should pick the smaller version among them. Wenn Sie .NET Standard z. B. auf .NET Framework 4.8 und .NET 5.0 ausführen möchten, ist die höchste .NET Standard-Version, die Sie verwenden können, .NET Standard 2.0.For example, if you want to run on .NET Framework 4.8 and .NET 5.0, the highest .NET Standard version you can use is .NET Standard 2.0.

Auswahl der .NET Standard-ZielversionWhich .NET Standard version to target

Bei der Auswahl der .NET Standard-Zielversion sollten Sie diesen Kompromiss berücksichtigen:When choosing a .NET Standard version to target, consider this trade-off:

  • Je höher die Version, desto mehr APIs stehen für den Code Ihrer Bibliothek zur Verfügung.The higher the version, the more APIs are available to your library's code.
  • Je niedriger die Version, desto mehr Apps und Bibliotheken können Ihre Bibliothek verwenden.The lower the version, the more apps and libraries can use your library.

Es wird empfohlen, die niedrigste mögliche Version von .NET Standard als Zielversion zu verwenden.We recommend you target the lowest version of .NET Standard possible. Nachdem Sie also die höchste .NET Standard-Zielversion gefunden, gehen Sie folgendermaßen vor:So, after you find the highest .NET Standard version you can target, follow these steps:

  1. Wählen Sie die nächst niedrigere .NET Standard-Version als Zielversion, und erstellen Sie Ihr Projekt.Target the next lower version of .NET Standard and build your project.
  2. Wenn das Projekt erfolgreich erstellt wurde, wiederholen Sie Schritt 1.If your project builds successfully, repeat step 1. Andernfalls wählen Sie die nächst höhere Version als Zielversion aus, und das ist die Version, die Sie verwenden sollten.Otherwise, retarget to the next higher version and that's the version you should use.

Das Auswählen niedrigerer .NET Standard-Versionen führt jedoch zu mehreren Unterstützungsabhängigkeiten.However, targeting lower .NET Standard versions introduces a number of support dependencies. Wenn Sie für Ihr Projekt .NET Standard 1.x auswählen, empfehlen wir auch .NET Standard 2.0 auszuwählen.If your project targets .NET Standard 1.x, we recommend that you also target .NET Standard 2.0. Dies vereinfacht das Abhängigkeitsdiagramm für Benutzer Ihrer Bibliothek, die .NET Standard 2.0-kompatible Implementierungen verwenden, und reduziert die Anzahl von Paketen, die heruntergeladen werden müssen.This simplifies the dependency graph for users of your library that run on .NET Standard 2.0 compatible implementations, and it reduces the number of packages they need to download.

Regeln für die .NET Standard-Versionskontrolle.NET Standard versioning rules

Es gibt zwei primäre Versionskontrollregeln:There are two primary versioning rules:

  • Additiv: .NET Standard-Versionen sind logisch konzentrische Kreise: höhere Versionen umfassen alle APIs früherer Versionen.Additive: .NET Standard versions are logically concentric circles: higher versions incorporate all APIs from previous versions. Zwischen den Versionen gibt es keine die Lauffähigkeit der Anwendung beeinträchtigenden Änderungen.There are no breaking changes between versions.
  • Unveränderlich: Nach der Auslieferung von .NET Standard-Versionen erfolgen keine Änderungen.Immutable: Once shipped, .NET Standard versions are frozen.

Nach Version 2.1 gibt es keine neuen .NET Standard-Versionen.There will be no new .NET Standard versions after 2.1. Weitere Informationen finden Sie später in diesem Artikel unter .NET 5 und .NET Standard.For more information, see .NET 5 and .NET Standard later in this article.

SpezifikationSpecification

Die Spezifikation von .NET Standard ist ein standardisierter Satz von APIs.The .NET Standard specification is a standardized set of APIs. Die Spezifikation wird durch Implementierungen von .NET verwaltet, insbesondere Microsoft (einschließlich .NET Framework, .NET Core und Mono) und Unity.The specification is maintained by .NET implementors, specifically Microsoft (includes .NET Framework, .NET Core, and Mono) and Unity.

Offizielle ArtefakteOfficial artifacts

Die offizielle Spezifikation ist eine Reihe von CS-Dateien zur Definition der APIs, die Bestandteile des Standards sind.The official specification is a set of .cs files that define the APIs that are part of the standard. Das ref-Verzeichnis im dotnet/standard-Repository definiert die .NET Standard-APIs.The ref directory in the dotnet/standard repository defines the .NET Standard APIs.

Das NETStandard.Library-Metapaket (Quelle) beschreibt den Satz von Bibliotheken, die (teilweise) eine oder mehrere Versionen von .NET Standard definieren.The NETStandard.Library metapackage (source) describes the set of libraries that define (in part) one or more .NET Standard versions.

Eine bestimmte Komponente wie System.Runtime beschreibt Folgendes:A given component, like System.Runtime, describes:

  • Teil von .NET Standard (nur der Bereich).Part of .NET Standard (just its scope).
  • Mehrere Versionen von .NET Standard für diesen Bereich.Multiple versions of .NET Standard, for that scope.

Abgeleitete Elemente werden bereitgestellt, um ein einfacheres Lesen und bestimmte Entwicklungsszenarios (z.B. die Verwendung eines Compilers) zu ermöglichen.Derivative artifacts are provided to enable more convenient reading and to enable certain developer scenarios (for example, using a compiler).

PaketdarstellungPackage representation

Das primäre Verteilungsinstrument für .NET Standard sind NuGet-Pakete.The primary distribution vehicle for the .NET Standard reference assemblies is NuGet packages. Implementierungen werden in einer Vielzahl von Methoden abgeleitet, die jeweils für die einzelnen .NET-Implementierungen geeignet sind.Implementations are delivered in a variety of ways, appropriate for each .NET implementation.

NuGet-Pakete sind auf mindestens ein Framework ausgerichtet.NuGet packages target one or more frameworks. .NET Standard-Pakete zielen auf das Framework „.NET Standard“ ab..NET Standard packages target the ".NET Standard" framework. Sie können über den netstandard komprimierten TFM (z. B. netstandard1.4) das .NET Standard-Framework als Ziel angeben.You can target the .NET Standard framework using the netstandard compact TFM (for example, netstandard1.4). Bibliotheken, die auf mehreren Implementierungen von .NET ausgeführt werden sollen, sollten dieses Framework als Ziel haben.Libraries that are intended to run on multiple implementations of .NET should target this framework. Ein Großteil der APIs sollte auf netstandard2.0 ausgerichtet sein, da sich die Anzahl an verfügbaren APIs im Laufe der Versionen .NET Standard 1.6 und 2.0 mehr als verdoppelt hat.For the broadest set of APIs, target netstandard2.0 since the number of available APIs more than doubled between .NET Standard 1.6 and 2.0.

Das Metapaket NETStandard.Library verweist auf den vollständigen Satz von NuGet-Paketen, die .NET Standard definieren.The NETStandard.Library metapackage references the complete set of NuGet packages that define .NET Standard. Die gängigste Methode, netstandard als Ziel auszuwählen, ist das Verweisen auf dieses Metapaket.The most common way to target netstandard is by referencing this metapackage. Es beschreibt und bietet Zugriff auf etwa 40 .NET-Bibliotheken und zugehörige APIs, die .NET Standard definieren.It describes and provides access to the ~40 .NET libraries and associated APIs that define .NET Standard. Sie können auf zusätzliche Pakete verweisen, die netstandard als Ziel verwenden, um Zugriff auf weitere APIs zu erhalten.You can reference additional packages that target netstandard to get access to additional APIs.

VersionskontrolleVersioning

Die Spezifikation ist nicht singulär, sondern eine Reihe linear versionierter APIs.The specification is not singular, but a linearly versioned set of APIs. In der ersten Version des Standards wird ein Basissatz von APIs eingerichtet.The first version of the standard establishes a baseline set of APIs. Nachfolgende Versionen fügen APIs hinzu und erben APIs, die in früheren Versionen definiert wurden.Subsequent versions add APIs and inherit APIs defined by previous versions. Es gibt keine festgelegte Möglichkeit zum Entfernen von APIs aus dem Standard.There is no established provision for removing APIs from the Standard.

.NET Standard ist weder spezifisch auf eine bestimmte .NET-Implementierung ausgelegt, noch entspricht die Spezifikation dem Versionierungsschema einer dieser Implementierungen..NET Standard is not specific to any one .NET implementation, nor does it match the versioning scheme of any of those implementations.

Wie bereits erwähnt gibt es nach Version 2.1 keine neuen .NET Standard-Versionen.As noted earlier, there will be no new .NET Standard versions after 2.1.

Verwenden von .NET Standard als ZielTarget .NET Standard

Sie können .NET Standard-Bibliotheken mithilfe einer Kombination aus dem netstandard-Framework und dem NETStandard.Library-Metapaket erstellen.You can build .NET Standard Libraries using a combination of the netstandard framework and the NETStandard.Library metapackage.

Der .NET Framework-Kompatibilitätsmodus.NET Framework compatibility mode

Mit .NET Standard 2.0 wurde der .NET Framework-Kompatibilitätsmodus eingeführt.Starting with .NET Standard 2.0, the .NET Framework compatibility mode was introduced. Mit diesem Kompatibilitätsmodus können .NET Standard-Projekte auf .NET Framework-Bibliotheken verweisen als wären sie für .NET Standard kompiliert.This compatibility mode allows .NET Standard projects to reference .NET Framework libraries as if they were compiled for .NET Standard. Es kann nicht für alle Projekte auf .NET Framework-Bibliotheken verwiesen werden. Dies ist zum Beispiel bei Bibliotheken der Fall, die Windows Presentation Foundation-APIs (WPF) verwenden.Referencing .NET Framework libraries doesn't work for all projects, such as libraries that use Windows Presentation Foundation (WPF) APIs.

Weitere Informationen finden Sie unter Der .NET Framework-Kompatibilitätsmodus.For more information, see .NET Framework compatibility mode.

.NET Standard-Bibliotheken und Visual Studio.NET Standard libraries and Visual Studio

Vergewissern Sie sich, dass unter Windows Visual Studio 2019 oder Visual Studio 2017 Version 15.3 oder höher bzw. unter macOS Visual Studio für Mac Version 7.1 oder höher installiert ist, damit Sie .NET Standard-Bibliotheken in Visual Studio erstellen können.In order to build .NET Standard libraries in Visual Studio, make sure you have Visual Studio 2019 or Visual Studio 2017 version 15.3 or later installed on Windows, or Visual Studio for Mac version 7.1 or later installed on macOS.

Wenn Sie nur .NET Standard 2.0-Bibliotheken in Ihren Projekten verarbeiten müssen, können Sie auch Visual Studio 2015 verwenden.If you only need to consume .NET Standard 2.0 libraries in your projects, you can also do that in Visual Studio 2015. Allerdings muss dabei der NuGet-Client 3.6 oder höher installiert sein.However, you need NuGet client 3.6 or higher installed. Sie können den NuGet-Client für Visual Studio 2015 auf der Seite NuGet-Downloads herunterladen.You can download the NuGet client for Visual Studio 2015 from the NuGet downloads page.

.NET 5 und .NET Standard.NET 5 and .NET Standard

.NET 5 ist die Implementierung von .NET, die Microsoft aktiv entwickelt..NET 5 is the implementation of .NET that Microsoft is actively developing. Dabei handelt es sich um ein einzelnes Produkt mit einheitlichen Funktionen und APIs, die für Windows-Desktop-Apps und plattformübergreifende Konsolen-Apps, Clouddienste und Websites verwendet werden können.It's a single product with a uniform set of capabilities and APIs that can be used for Windows desktop apps and cross-platform console apps, cloud services, and websites. Die .NET 5.0-Zielframeworkmoniker (TFMs) spiegeln diese große Bandbreite von Szenarios wider:The .NET 5.0 TFMs reflect this broad range of scenarios:

  • net5.0

    Dieser TFM ist für Code bestimmt, der überall ausgeführt werden kann.This TFM is for code that runs everywhere. Mit wenigen Ausnahmen sind nur Technologien enthalten, die plattformübergreifend funktionieren.With a few exceptions, it includes only technologies that work cross-platform. Für .NET 5-Code ersetzt net5.0 die TFMs netcoreapp und netstandard.For .NET 5 code, net5.0 replaces both netcoreapp and netstandard TFMs.

  • net5.0-windows

    Dies ist ein Beispiel für betriebssystemspezifische TFMs, die allen Elementen, auf die net5.0 verweist, betriebssystemspezifische Funktionen hinzufügen.This is an example of OS-specific TFMs that add OS-specific functionality to everything that net5.0 refers to.

Informationen zum Abzielen auf „net5.0“ bzw. „netstandard“When to target net5.0 vs. netstandard

Bei vorhandenem Code, der auf netstandard abzielt, ist es nicht erforderlich, den TFM in net5.0 zu ändern.For existing code that targets netstandard, there's no need to change the TFM to net5.0. .NET 5.0 implementiert .NET Standard 2.1 und frühere Versionen..NET 5.0 implements .NET Standard 2.1 and earlier. Der einzige Grund für das erneute Abzielen von .NET Standard auf .NET 5.0 wäre der Zugriff auf weitere Runtimefeatures, Sprachfeatures oder APIs.The only reason to retarget from .NET Standard to .NET 5.0 would be to gain access to more runtime features, language features, or APIs. Sie müssen .NET 5.0 als Ziel verwenden, um beispielsweise C# 9 verwenden zu können.For example, in order to use C# 9, you need to target .NET 5.0. Sie können auch .NET 5.0 und .NET Standard als Zielversion festlegen, um Zugriff auf neuere Features zu erhalten und Ihre Bibliothek weiterhin anderen .NET-Implementierungen zur Verfügung zu stellen.You can multitarget .NET 5.0 and .NET Standard to get access to newer features and still have your library available to other .NET implementations.

Hier finden Sie einige Richtlinien für neuen Code für .NET 5:Here are some guidelines for new code for .NET 5:

  • App-KomponentenApp components

    Wenn Sie Bibliotheken verwenden, um eine Anwendung in verschiedene Komponenten aufzuteilen, empfiehlt es sich, net5.x als Ziel zu verwenden, wobei 5.x die früheste Version von .NET 5 ist, auf die Ihre Anwendung abzielen kann.If you're using libraries to break down an application into several components, we recommend you target net5.x where 5.x is the earliest .NET 5 version that your application can target. Der Einfachheit halber sollten Sie für alle Projekte, aus denen Ihre Anwendung besteht, dieselbe .NET-Version verwenden.For simplicity, it's best to keep all projects that make up your application on the same version of .NET. Folglich können Sie die gleichen BCL-Features von überall aus verwenden.Then you can assume the same BCL features everywhere.

  • Wiederverwendbare BibliothekenReusable libraries

    Wenn Sie wiederverwendbare Bibliotheken erstellen, die NuGet enthalten soll, sollten Sie den Kompromiss zwischen Reichweite und verfügbaren Features berücksichtigen.If you're building reusable libraries that you plan to ship on NuGet, consider the trade-off between reach and available feature set. .NET Standard 2.0 ist die neueste von .NET Framework unterstützte Version, sodass diese Spezifikation eine große Reichweite und relativ viele Features bietet..NET Standard 2.0 is the latest version that is supported by .NET Framework, so it gives good reach with a fairly large feature set. Es wird nicht empfohlen, .NET Standard 1.x als Ziel festzulegen, da Sie so die Anzahl der verfügbaren Features für eine minimal größere Reichweite reduzieren würden.We don't recommend targeting .NET Standard 1.x, as you'd limit the available feature set for a minimal increase in reach.

    Wenn Sie .NET Framework nicht unterstützen müssen, können Sie .NET Standard 2.1 oder .NET 5 verwenden.If you don't need to support .NET Framework, you could go with .NET Standard 2.1 or .NET 5. Es wird empfohlen, .NET Standard 2.1 zu überspringen und direkt .NET 5 zu verwenden.We recommend you skip .NET Standard 2.1 and go straight to .NET 5. Die am häufigsten verwendeten Bibliotheken haben mit .NET Standard 2.0 und .NET 5 mehrere Zielversionen.Most widely used libraries will end up multi-targeting for both .NET Standard 2.0 and .NET 5. Die Unterstützung von .NET Standard 2.0 bietet die größte Reichweite, während durch die Unterstützung von .NET 5 sichergestellt wird, dass Sie die neuesten Plattformfeatures für Kunden nutzen können, die bereits .NET 5 verwenden.Supporting .NET Standard 2.0 gives you the most reach, while supporting .NET 5 ensures you can leverage the latest platform features for customers that are already on .NET 5.

Probleme mit .NET Standard.NET Standard problems

Im Folgenden werden einige Probleme mit .NET Standard erläutert, die aufzeigen, warum .NET 5 die bessere Wahl beim Freigeben von Code für Plattformen und Workloads ist:Here are some problems with .NET Standard that help explain why .NET 5 is the better way to share code across platforms and workloads:

  • Langsames Hinzufügen neuer APIsSlowness to add new APIs

    .NET Standard wurde als API-Satz erstellt, der von allen .NET-Implementierungen unterstützt werden sollte, sodass es einen Überprüfungsprozess für Vorschläge zum Hinzufügen neuer APIs gab..NET Standard was created as an API set that all .NET implementations would have to support, so there was a review process for proposals to add new APIs. Ziel war es, nur die APIs zu standardisieren, die in alle aktuellen und zukünftigen .NET-Plattformen implementiert werden könnten.The goal was to standardize only APIs that could be implemented in all current and future .NET platforms. Dies hatte zur Folge, dass Sie möglicherweise einige Jahre warten mussten, bis ein Feature, das zuvor nicht in einem Release verfügbar war, zu einer Version des Standards hinzugefügt wurde.The result was that if a feature missed a particular release, you might have to wait for a couple of years before it got added to a version of the Standard. Dann mussten Sie noch länger warten, bis die neue Version von .NET Standard umfassend unterstützt wird.Then you'd wait even longer for the new version of .NET Standard to be widely supported.

    Lösung in .NET 5: Wenn ein Feature implementiert wird, ist es bereits für jede .NET 5-App und -Bibliothek verfügbar, da die Codebasis freigegeben ist.Solution in .NET 5: When a feature is implemented, it's already available for every .NET 5 app and library because the code base is shared. Da es keinen Unterschied zwischen der API-Spezifikation und der Implementierung gibt, können Sie neue Features viel schneller nutzen als mit .NET Standard.And since there's no difference between the API specification and its implementation, you're able to take advantage of new features much quicker than with .NET Standard.

  • Komplexe VersionsverwaltungComplex versioning

    Die Trennung der API-Spezifikation von ihren Implementierungen führt zu einer komplexen Zuordnung zwischen API-Spezifikationsversionen und Implementierungsversionen.The separation of the API specification from its implementations results in complex mapping between API specification versions and implementation versions. Diese Komplexität wird in der zuvor in diesem Artikel gezeigten Tabelle und in den Anweisungen zur Interpretation erläutert.This complexity is evident in the table shown earlier in this article and the instructions for how to interpret it.

    Lösung in .NET 5: Es gibt keine Trennung zwischen einer .NET 5.x-API-Spezifikation und ihrer Implementierung.Solution in .NET 5: There's no separation between a .NET 5.x API specification and its implementation. Das Ergebnis ist ein vereinfachtes TFM-Schema.The result is a simplified TFM scheme. Es gibt ein TFM-Präfix für alle Workloads: net5.0 wird für Bibliotheken, Konsolen-Apps und Web-Apps verwendet.There's one TFM prefix for all workloads: net5.0 is used for libraries, console apps, and web apps. Die einzige Variation ist ein Suffix, das plattformspezifische APIs für eine bestimmte Plattform angibt (z. B. net5.0-windows).The only variation is a suffix that specifies platform-specific APIs for a particular platform, such as net5.0-windows. Dank dieser TFM-Namenskonvention können Sie leicht erkennen, ob eine bestimmte App eine bestimmte Bibliothek verwenden kann.Thanks to this TFM naming convention, you can easily tell whether a given app can use a given library. Es ist keine äquivalente Tabelle mit Versionsnummern wie jene für .NET Standard erforderlich.No version number equivalents table like the one for .NET Standard is needed.

  • Nicht von der Plattform unterstützte Ausnahmen zur LaufzeitPlatform-unsupported exceptions at run time

    .NET Standard macht plattformspezifische APIs verfügbar..NET Standard exposes platform-specific APIs. Der Code wird möglicherweise fehlerfrei kompiliert und scheint auf jede beliebige Plattform portierbar zu sein, auch wenn er nicht portierbar ist.Your code might compile without errors and appear to be portable to any platform even if it isn't portable. Bei der Ausführung auf einer Plattform, die über keine Implementierung für eine bestimmte API verfügt, erhalten Sie Laufzeitfehler.When it runs on a platform that doesn't have an implementation for a given API, you get run-time errors.

    Lösung in .NET 5: Das .NET 5 SDK umfasst Codeanalysetools, die standardmäßig aktiviert sind.Solution in .NET 5: The .NET 5 SDK includes code analyzers that are enabled by default. Das Analysetool für die Plattformkompatibilität erkennt die unbeabsichtigte Verwendung von APIs, die auf den Plattformen, auf denen Sie sie ausführen möchten, nicht unterstützt werden.The platform compatibility analyzer detects unintentional use of APIs that aren't supported on the platforms you intend to run on. Weitere Informationen finden Sie unter Analysetool für die Plattformkompatibilität.For more information, see Platform compatibility analyzer.

.NET Standard nicht veraltet.NET Standard not deprecated

Für die Bibliotheken, die von mehreren .NET-Implementierungen verwendet werden können, wird .NET Standard weiterhin benötigt..NET Standard is still needed for libraries that can be used by multiple .NET implementations. Es wird empfohlen, .NET Standard in den folgenden Szenarios als Ziel zu verwenden:We recommend you target .NET Standard in the following scenarios:

  • Verwenden Sie netstandard2.0, um Code für .NET Framework und alle anderen Implementierungen von .NET freizugeben.Use netstandard2.0 to share code between .NET Framework and all other implementations of .NET.
  • Verwenden Sie netstandard2.1, um Code für Mono, Xamarin und .NET Core 3.x freizugeben.Use netstandard2.1 to share code between Mono, Xamarin, and .NET Core 3.x.

Weitere InformationenSee also