Ich habe über den Unterschied zwischen .NET Standard und .NET Core gelesen, weiß aber nicht, was der Unterschied ist oder wann ich ein .NET Standard-Bibliotheksprojekt und wann ich ein .NET Core-Bibliotheksprojekt auswählen soll.
Ich habe gelesen, dass .NET Standard sicherstellen soll, dass unabhängig von der verwendeten Plattform immer eine Reihe von APIs verfügbar sind (sofern diese Plattform mit der von mir ausgewählten .NET Standard-Version kompatibel ist). Wenn ich mich nicht irre, bedeutet dies, dass ich eine Klassenbibliothek von .NET Standard erstellen und sie dann auf jeder Plattform verwenden kann, die mit der von mir ausgewählten .NET Standard-Version kompatibel ist.
Mit .NET Core habe ich gelesen, dass es auch für die plattformübergreifende Verwendung vorgesehen ist. Wenn ich mich also für eine .NET Core-Bibliothek entscheide, kann ich sie anscheinend auch auf vielen Plattformen verwenden, genau wie .NET Standard.
Am Ende sehe ich also keinen Unterschied. Wann soll ich welche verwenden? Was ist der Unterschied zwischen ihnen?
quelle
Antworten:
Ich werde versuchen, Ihre Zweifel weiter zu klären und die Antwort von Jon Skeet zu erweitern.
.NET Standard ist eine Spezifikation , sodass eine für eine bestimmte .NET Standard-Version kompilierte Bibliothek in verschiedenen .NET Standard-Implementierungen verwendet werden kann.
Wie in meinem anderen Kommentar erwähnt, ist eine gute Analogie für die Beziehung zwischen .NET Standard und anderen .NET Standard-Implementierungen (.NET Core, .NET Framework usw.) das Wesentliche von David Fowler : .NET Standard-Versionen sind
Interfaces
, während Frameworks sind Implementierungen dieser Schnittstellen.Dieses vereinfachte Diagramm kann helfen, diese Beziehung zu verstehen:
Alle Ziele
NetCore10
haben Zugriff aufINetStandard15
APIs undNetCore10
bestimmte APIs (z. B.DotNetHostPolicy
).Natürlich kann diese Bibliothek nicht in verschiedenen
INetStandard15
Implementierungen verwendet werden (NetCore10
ist nicht konvertierbar inNetFramework462
oderMono46
).Wenn Sie stattdessen brauchen nur Zugriff auf
INetStandard15
APIs (und Ziel , dass Spezifikation anstelle eines konkreten Rahmen) Ihrer Bibliothek kann durch verwendet werden jeden es Rahmen die Geräte (NetCore10
,NetFramework462
usw.)Hinweis: In der ursprünglichen Analogie verwendete David Fowler Schnittstellen sowohl für .NET Standard-Versionen als auch für Framework-Implementierungen. Ich glaube, dass die Verwendung von Schnittstellen und Klassen intuitiver ist und die Beziehung zwischen Spezifikationen und konkreten Implementierungen besser darstellt.
quelle
.NET Core ist eine Implementierung von .NET Standard. Es ist auf mehreren Betriebssystemen verfügbar, aber das ist nicht dasselbe - es gibt auch andere Implementierungen von .NET Standard.
Wenn Sie also eine .NET Core-Bibliothek erstellen, hat diese Zugriff auf Dinge, die in .NET Core implementiert sind, aber nicht Teil von .NET Standard sind, und Ihre Bibliothek ist nicht mit anderen Implementierungen von .NET Standard kompatibel . wie Xamarin, Tizen, vollständiges .NET-Desktop-Framework usw.
Kurz gesagt: Um maximale Portabilität zu erzielen, sollten Sie Ihre Bibliothek zum .NET-Standard machen.
quelle
INetStandard16
. B. ). .NET Core 1.0 und Mono 4.6 werden beide implementiertINetStandard16
. Sie können .Net Core 1.0 nicht in Mono 4.6 konvertieren (und umgekehrt), aber alles, was verwendetINetStandard16
wird, funktioniert auf beiden. (Die .NET Core Class-Bibliothek ist im Grunde eine Teilmenge der .NET Framework-Bibliothek, die nur weniger APIs enthält. Das Festhalten an der .NET Core Class-Bibliothek erschwert die gemeinsame Nutzung von Code zwischen Laufzeiten. Dieser Code funktioniert möglicherweise nicht für eine andere Laufzeit (Mono für Xamarin), da er nicht über die von Ihnen benötigte API verfügt. Um dies zu lösen, gibt es .NET Standard, eine Spezifikation, die Ihnen sagt, welche APIs Sie verwenden können . Der Hauptzweck von .NET Standard besteht darin, Code zwischen Laufzeiten gemeinsam zu nutzen. Und es ist wichtig, dass diese Spezifikation von allen Laufzeiten implementiert wird. (.NET Framework, .NET Core und Mono für Xamarin).
Wenn Sie also sicher sind, dass Sie Ihre Bibliothek nur für .NET Core-Projekte verwenden, können Sie .NET Standard ignorieren. Wenn jedoch nur eine geringe Wahrscheinlichkeit besteht, dass Ihr Code von .NET Framework oder Mono für Xamarin verwendet wird, ist dies besser sich an .NET Standard halten
Beachten Sie auch, dass höhere Versionen von .NET Standard mehr APIs enthalten, niedrigere Versionen jedoch von mehr Plattformen unterstützt werden. Wenn Sie daher eine .NET Standard-Bibliothek erstellen, die Sie zwischen den Laufzeiten gemeinsam nutzen möchten, wählen Sie die niedrigste Version aus , mit der Sie die meisten Plattformen erreichen können. Wenn Sie beispielsweise unter .NET Framework 4.5 und .NET Core 1.0 ausführen möchten, können Sie als .NET Standard 1.1 die höchste .NET Standard-Version verwenden. Weitere Informationen hierzu finden Sie in dieser großartigen Tabelle in der Dokumentation .
PS: Auch wenn Sie Ihre Bibliothek in .NET Standard konvertieren möchten, kann Ihnen der .NET Portability Analyzer dabei helfen.
quelle
.NET Standard ist eine Spezifikation von .NET-APIs, die in .NET-Implementierungen verfügbar sein sollen. Auf diese Weise können einheitliche BCL-APIs für alle .NET-Implementierungen definiert werden.
.NET Core ist eine solche Implementierung von .NET Standard. .NET Framework ist eine weitere Implementierung von .NET Standard.
Bild aus dem .NET-Blog
Die Antwort von Federicos gibt Ihnen einen grafischen Überblick darüber, wie sich jedes Framework mit den Versionen entwickelt. Schauen Sie sich das folgende Diagramm aus Microsoft Docs an .
quelle
Das oben Gesagte sowie eine sehr klare Erklärung der meisten in dieser Frage behandelten Themen finden Sie in dem folgenden äußerst hilfreichen Artikel von Microsoft (MSDN - September 2017): .NET Standard - Entmystifizierung von .NET Core und .NET Standard
quelle
Meinten Sie .NET Framework? Weil der .NET-Standard eine Implementierung wie .NET Framework, .NET Core und Xamarin ist.
Ich liebe .NET Core, weil wir es unter Linux hosten können (verwenden Sie nach meiner Erfahrung Nginx). Es unterscheidet sich von .NET Framework, das Sie nur auf IIS hosten können. In diesem Fall können Sie über das Hosting-Budget nachdenken (weil Windows Server für mich teuer ist).
In der Perspektive der Entwicklungsumgebung ist der .Net-Kern leichtgewichtig. Sie können also VSCode, Sublime, für IDE verwenden (nicht nur Visual Studio).
quelle
In einfachen Worten wird der .NET-Standard zum Schreiben von Klassenbibliotheksprojekten verwendet, die in DLL kompiliert werden. .NET Core kann zum Entwickeln von tatsächlichen Webanwendungen verwendet werden, die auf allen Betriebssystemen (Windows, Linux, MacOS) ausgeführt werden können. (In .NET Core 3 bietet Microsoft die Funktionalität zum Entwickeln von Desktop-Apps mit WPF. Bisher sind diese Apps jedoch nicht plattformübergreifend und können nur unter Windows ausgeführt werden. In Zukunft werden sie möglicherweise auch plattformübergreifend von Microsoft ausgeführt.) .NET-Standard Bibliotheken / DLLs können in jeder Anwendung verwendet werden, die .NET (.NET Framework, .NET Core) verwendet. Dies bedeutet, dass Sie den .NET-Standard sowohl mit .NET Framework als auch mit .NET Core verwenden können.
quelle