.NET-Standard.NET Standard

.NET Standard ist eine formale Spezifikation von .NET-APIs, die für alle .NET-Implementierungen verfügbar sein sollen.The .NET Standard is a formal specification of .NET APIs that are intended to be available on all .NET implementations. Die Motivation hinter .NET Standard ist das Herstellen einer umfassenderen Einheitlichkeit im .NET-Ökosystem.The motivation behind the .NET Standard is establishing greater uniformity in the .NET ecosystem. Auch wenn ECMA-335 weiterhin für Einheitlichkeit im .NET-Implementierungsverhalten sorgt, gibt es keine ähnliche Spezifikation für die .NET-Basisklassenbibliotheken (BCL) für Implementierungen der .NET-Bibliothek.ECMA 335 continues to establish uniformity for .NET implementation behavior, but there is no similar spec for the .NET Base Class Libraries (BCL) for .NET library implementations.

.NET Standard ermöglicht im Wesentlichen die folgenden Szenarios:The .NET Standard enables the following key scenarios:

  • Sie definiert einen einheitlichen Satz von BCL-APIs, die unabhängig von der Arbeitsauslastung für alle .NET-Implementierungen implementiert werden.Defines uniform set of BCL APIs for all .NET implementations to implement, independent of workload.
  • Sie ermöglicht Entwicklern die Erstellung portabler Bibliotheken, die anhand desselben Satzes von APIs in .NET-Implementierungen eingesetzt werden können.Enables developers to produce portable libraries that are usable across .NET implementations, using this same set of APIs.
  • Sie reduziert oder beseitigt sogar die bedingte Kompilierung freigegebener Quellen aufgrund von .NET-APIs (nur für Betriebssystem-APIs).Reduces or even eliminates conditional compilation of shared source due to .NET APIs, only for OS APIs.

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 macht damit alle APIs verfügbar, die in den Versionen 1.0 bis 1.3 von .NET Standard definiert sind.For example, the .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 Core 1.0 .NET Standard 1.6 implementiert.Similarly, the .NET Framework 4.6.1 implements .NET Standard 1.4, while .NET Core 1.0 implements .NET Standard 1.6.

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

In der folgenden Tabelle sind alle Versionen von .NET Standard und die unterstützten Plattformen aufgeführt:The following table lists all versions of .NET Standard and the platforms supported:

.NET-Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0
.NET Framework (mit dem .NET Core 1.x SDK) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.2
.NET Framework (mit dem .NET Core 2.0 SDK) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 5.4
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.14
Xamarin.Mac 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.8
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 8.0
Universelle Windows-Plattform 10.0 10.0 10.0 10.0 10.0 vNext vNext vNext
Windows 8.0 8.0 8.1
Windows Phone 8.1 8.1 8.1
Windows Phone Silverlight 8.0
  • Die Spalten stellen die .NET Standard-Versionen dar. 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.
  • Die Zeilen stellen die verschiedenen .NET-Implementierungen dar.
  • 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.

Gehen Sie folgendermaßen vor, um die höchste Version von .NET Standard zu suchen, die Sie als Ziel verwenden können:To find the highest version of .NET Standard that you can target, do the following:

  1. Suchen Sie die Zeile, die die .NET-Implementierung enthält, die Sie ausführen möchten.Find the row that indicate 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 (alle niedrigeren .NET Standard-Versionen werden ebenfalls unterstützt).The column header indicates the .NET Standard version that your target supports (and any lower .NET Standard versions will also support it).
  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.5 und .NET Core 1.0 ausführen möchten, ist die höchste .NET Standard-Version, die Sie verwenden können, .NET Standard 1.1.For example, if you want to run on .NET Framework 4.5 and .NET Core 1.0, the highest .NET Standard version you can use is .NET Standard 1.1.

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

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

  • Je höher die Version, desto mehr APIs stehen zur Verfügung.The higher the version, the more APIs are available to you.
  • Je niedriger die Version, desto mehr Plattformen unterstützen sie.The lower the version, the more platforms implement it.

Im Allgemeinen sollten Sie als Zielversion die niedrigste mögliche Version von .NET Standard verwenden.In general, we recommend you to 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.

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.Immutable. Nach der Auslieferung von .NET Standard-Versionen erfolgen keine Änderungen.Once shipped, .NET Standard versions are frozen. Neue APIs werden mit bestimmten .NET-Implementierungen wie .NET Core zum ersten Mal verfügbar.New APIs will first become available in specific .NET implementations, such as .NET Core. Wenn das .NET Standard-Prüfungsgremium der Ansicht ist, dass die neuen APIs allgemein bereitgestellt werden sollten, werden sie in einer neuen Version von .NET Standard hinzugefügt.If the .NET Standard review board believes the new APIs should be made available everywhere, they'll be added in a new .NET Standard version.

Vergleich mit portablen KlassenbibliothekenComparison to Portable Class Libraries

.NET Standard ersetzt portable Klassenbibliotheken (PCL)..NET Standard is the replacement for Portable Class Libraries (PCL). .NET Standard profitiert von der Erfahrung mit der Erstellung portabler Bibliotheken, indem eine Standard-BCL zusammengestellt und damit eine umfassendere Einheitlichkeit für .NET-Implementierungen hergestellt wird.The .NET Standard improves on the experience of creating portable libraries by curating a standard BCL and establishing greater uniformity across .NET implementations as a result. Eine Bibliothek, die .NET Standard als Ziel verwendet, ist eine PCL oder eine „auf .NET Standard basierende PCL“.A library that targets .NET Standard is a PCL or a ".NET Standard-based PCL". Vorhandene PCLs werden als „profilbasierte PCLs“ bezeichnet.Existing PCLs are "profile-based PCLs".

.NET Standard und PCL-Profile wurden zu ähnlichen Zwecke erstellt, unterscheiden sich jedoch in wesentlichen Bereichen..NET Standard and PCL profiles were created for similar purposes but also differ in key ways.

Ähnlichkeiten:Similarities:

  • Definiert die APIs, die zur Freigabe von binärem Code verwendet werden können.Defines APIs that can be used for binary code sharing.

Unterschiede:Differences:

  • .NET Standard ist ein zusammengestellter Satz von APIs, während PCL-Profile durch Schnittpunkte vorhandener Plattformen definiert werden..NET Standard is a curated set of APIs, while PCL profiles are defined by intersections of existing platforms.
  • .NET Standard weist im Gegensatz zu PCL-Profilen eine lineare Versionierung auf..NET Standard linearly versions, while PCL profiles do not.
  • PCL-Profile stehen für Microsoft-Plattformen, während .NET Standard plattformunabhängig ist.PCL profiles represents Microsoft platforms while the .NET Standard is agnostic to platform.

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. Im Rahmen der Einrichtung neuer Versionen von .NET Standard über GitHub wird ein öffentlicher Feedbackprozess verwendet.A public feedback process is used as part of establishing new .NET Standard versions through GitHub.

Offizielle ArtefakteOfficial artifacts

Die offizielle Spezifikation ist ein Satz 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 will be 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. Die Pakete von .NET Standard sind für das Framework „.NET Standard“ ausgelegt.The .NET Standard packages target the ".NET Standard" framework. Sie können über den komprimierten TFM netstandard (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 Runtimes ausgeführt werden sollen, sollten dieses Framework als Ziel verwenden.Libraries that are intended to run on multiple runtimes should target this framework.

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 ein ständig wachsender und linear versionierter Satz von APIs.The specification is not singular, but an incrementally growing and 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 sie dem Versionierungsschema einer dieser Runtimes..NET Standard is not specific to any one .NET implementation, nor does it match the versioning scheme of any of those runtimes.

APIs, die einer der Implementierungen (z.B. .NET Framework, .NET Core und Mono) hinzugefügt werden, können als Kandidaten für die Spezifikation betrachtet werden, insbesondere, wenn sie von grundlegender Natur sind.APIs added to any of the implementations (such as, .NET Framework, .NET Core and Mono) can be considered as candidates to add to the specification, particularly if they are thought to be fundamental in nature. Neue Versionen von .NET Standard werden basierend auf .NET-Implementierungsversionen erstellt, sodass Sie neue APIs über eine .NET Standard-PCL adressieren können.New versions of .NET Standard are created based on .NET implementation releases, enabling you to target new APIs from a .NET Standard PCL. Die Mechanismen der Versionskontrolle werden ausführlich unter .NET Core-Versionskontrolle beschrieben.The versioning mechanics are described in more detail in .NET Core Versioning.

Die Versionskontrolle von .NET Standard ist wichtig für die Nutzung..NET Standard versioning is important for usage. Mit einer bestimmten Version von .NET Standard können Sie Bibliotheken verwenden, die auf dieselbe oder eine niedrigere Version ausgerichtet sind.Given a .NET Standard version, you can use libraries that target that same or lower version. Die folgende Vorgehensweise beschreibt den Workflow für die Verwendung von PCLs von .NET Standard, die auf .NET Standard ausgerichtet sind.The following approach describes the workflow for using .NET Standard PCLs, specific to .NET Standard targeting.

  • Wählen Sie eine Version von .NET Standard für Ihre PCL.Select a .NET Standard version to use for your PCL.
  • Verwenden Sie Bibliotheken, die von derselben oder einer niedrigeren Version von .NET Standard abhängig sind.Use libraries that depend on the same .NET Standard version or lower.
  • Wenn Sie eine Bibliothek finden, die von einer höheren Version von .NET Standard abhängig ist, müssen Sie entweder dieselbe Version implementieren oder von der Verwendung dieser Bibliothek absehen.If you find a library that depends on a higher .NET Standard version, you either need to adopt that same version or decide not to use that library.

PCL-KompatibilitätPCL compatibility

.NET Standard ist mit einer Teilmenge von PCL-Profilen kompatibel..NET Standard is compatible with a subset of PCL profiles. .NET Standard der Versionen 1.0, 1.1 und 1.2 überschneiden sich jeweils mit einem Satz von PCL-Profilen..NET Standard 1.0, 1.1 and 1.2 each overlap with a set of PCL profiles. Diese Überschneidung wurde aus zwei Gründen erstellt:This overlap was created for two reasons:

  • Auf dem .NET-Standard basierende PCLs können auf profilbasierte PCLs verweisen.Enable .NET Standard-based PCLs to reference profile-based PCLs.
  • Profilbasierte PCLs können als auf dem .NET-Standard basierende PCLs paketiert werden.Enable profile-based PCLs to be packaged as .NET Standard-based PCLs.

Die Kompatibilität profilbasierter PCLs wird über das NuGet-Paket Microsoft.NETCore.Portable.Compatibility gewährleistet.Profile-based PCL compatibility is provided by the Microsoft.NETCore.Portable.Compatibility NuGet package. Diese Abhängigkeit ist erforderlich, wenn Sie auf NuGet-Pakete verweisen, die profilbasierte PCLs enthalten.This dependency is required when referencing NuGet packages that contain profile-based PCLs.

Profilbasierte PCLs, die als netstandard paketiert wurden, sind einfacher zu verwenden als normal paketierte profilbasierte PCLs.Profile-based PCLs packaged as netstandard are easier to consume than typically packaged profile-based PCLs. netstandard-Verpackung ist mit vorhandenen Benutzern kompatibel.netstandard packaging is compatible with existing users.

Sehen Sie sich den Satz von PCL-Profilen an, die mit dem .NET-Standard kompatibel sind:You can see the set of PCL profiles that are compatible with the .NET Standard:

PCL-ProfilPCL Profile .NET-Standard.NET Standard PCL-PlattformenPCL Platforms
Profile7Profile7 1.11.1 .NET Framework 4.5, Windows 8.NET Framework 4.5, Windows 8
Profile31Profile31 1.01.0 Windows 8.1, Windows Phone Silverlight 8.1Windows 8.1, Windows Phone Silverlight 8.1
Profile32Profile32 1.21.2 Windows 8.1, Windows Phone 8.1Windows 8.1, Windows Phone 8.1
Profile44Profile44 1.21.2 .NET Framework 4.5.1, Windows 8.1.NET Framework 4.5.1, Windows 8.1
Profile49Profile49 1.01.0 .NET Framework 4.5, Windows Phone Silverlight 8.NET Framework 4.5, Windows Phone Silverlight 8
Profile78Profile78 1.01.0 .NET Framework 4.5, Windows 8, Windows Phone Silverlight 8.NET Framework 4.5, Windows 8, Windows Phone Silverlight 8
Profile84Profile84 1.01.0 Windows Phone 8.1, Windows Phone Silverlight 8.1Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile111Profile111 1.11.1 .NET Framework 4.5, Windows 8, Windows Phone 8.1.NET Framework 4.5, Windows 8, Windows Phone 8.1
Profile151Profile151 1.21.2 .NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1.NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1
Profile157Profile157 1.01.0 Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile259Profile259 1.01.0 .NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8.NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8

Festlegen von .NET Standard als ZielTargeting .NET Standard

Sie können .NET-Standardbibliotheken anhand 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. Sehen Sie sich Beispiele dafür an, wie .NET Standard mithilfe von .NET Core-Tools als Ziel festgelegt wird.You can see examples of targeting the .NET Standard with .NET Core tools.

Siehe auchSee also

.NET Standard-Versionen.NET Standard Versions