Wann sollten wir eins über das andere verwenden?
Die Entscheidung ist ein Kompromiss zwischen Kompatibilität und API-Zugriff.
Verwenden Sie eine .NET-Standardbibliothek, wenn Sie die Anzahl der Apps erhöhen möchten, die mit Ihrer Bibliothek kompatibel sind, und wenn Sie die .NET-API-Oberfläche, auf die Ihre Bibliothek zugreifen kann, verringern können.
Verwenden Sie eine .NET Core-Bibliothek, wenn Sie die .NET API-Oberfläche vergrößern möchten, auf die Ihre Bibliothek zugreifen kann, und Sie können nur zulassen, dass nur .NET Core-Apps mit Ihrer Bibliothek kompatibel sind.
Eine Bibliothek, die auf .NET Standard 1.3 abzielt, ist beispielsweise mit Apps kompatibel , die auf .NET Framework 4.6, .NET Core 1.0, Universal Windows Platform 10.0 und jede andere Plattform, die .NET Standard 1.3 unterstützt, abzielen. Die Bibliothek hat jedoch keinen Zugriff auf einige Teile der .NET-API. Das Microsoft.NETCore.CoreCLR
Paket ist beispielsweise mit .NET Core kompatibel, jedoch nicht mit .NET Standard.
Was ist der Unterschied zwischen der Klassenbibliothek (.NET Standard) und der Klassenbibliothek (.NET Core)?
Der Abschnitt Paketbasierte Frameworks beschreibt den Unterschied.
Kompatibilität: Bibliotheken, die auf .NET Standard abzielen, können auf jeder .NET Standard-kompatiblen Laufzeit ausgeführt werden, z. B. .NET Core, .NET Framework, Mono / Xamarin. Bibliotheken, die auf .NET Core abzielen, können jedoch nur zur Laufzeit von .NET Core ausgeführt werden.
API-Oberfläche: .NET Standard-Bibliotheken enthalten alles, NETStandard.Library
während .NET Core-Bibliotheken alles enthalten Microsoft.NETCore.App
. Letzteres enthält ungefähr 20 zusätzliche Bibliotheken, von denen einige manuell zu unserer .NET Standard-Bibliothek (z. B. System.Threading.Thread
) hinzugefügt werden können und von denen einige nicht mit dem .NET Standard (z. B. Microsoft.NETCore.CoreCLR
) kompatibel sind .
Außerdem geben .NET Core-Bibliotheken eine Laufzeit an und werden mit einem Anwendungsmodell geliefert. Dies ist beispielsweise wichtig, um Unit-Test-Klassenbibliotheken ausführbar zu machen.
Warum gibt es beides?
Wenn Sie Bibliotheken für einen Moment ignorieren, liegt der Grund für die Existenz von .NET Standard in der Portabilität. Es definiert eine Reihe von APIs, deren Implementierung .NET-Plattformen zustimmen. Jede Plattform, die einen .NET-Standard implementiert, ist mit Bibliotheken kompatibel, die auf diesen .NET-Standard abzielen. Eine dieser kompatiblen Plattformen ist .NET Core.
Zurück zu den Bibliotheken: Die .NET Standard-Bibliotheksvorlagen können auf mehreren Laufzeiten ausgeführt werden (auf Kosten der API-Oberfläche). Umgekehrt sind die .NET Core-Bibliotheksvorlagen vorhanden, um (auf Kosten der Kompatibilität) auf mehr API-Oberfläche zuzugreifen und eine Plattform anzugeben, auf der eine ausführbare Datei erstellt werden soll.
Hier ist eine interaktive Matrix , die zeigt, welcher .NET Standard welche .NET-Implementierung (en) unterstützt und wie viel API-Oberfläche verfügbar ist.