Was ist der Unterschied zwischen .NET Core und .NET Standard Class Library-Projekttypen?
In Visual Studio, es gibt mindestens 3 verschiedene Typen der Klasse Bibliothek, die Sie erstellen können:
- Class Library (.NET Framework)
- Class Library (.NET Standard)
- Class Library (.NET-Core)
Während das erste ist das, was wir schon seit Jahren nutzen, ein wichtiger Punkt der Verwirrung, die ich habe ist, wenn die zu benutzen .NET Standard und .NET Core class library-Typen. Ich habe gebissen worden, durch das vor kurzem beim Versuch,multi-target verschiedene framework-Versionenund Erstellung eines unit-test-Projekt.
Also, was ist der Unterschied zwischen Class Library (.NET Standard)
und Class Library (.NET Core)
warum beide bestehen, und Wann sollten wir nutzen einen über den anderen?
InformationsquelleAutor der Frage Gigi | 2017-03-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Entscheidung ist ein trade-off zwischen Kompatibilität und API-Zugriff.
Verwenden .NET-Standard-Bibliothek, wenn Sie wollen, um die Zahl der apps, die kompatibel sind mit Ihrer Bibliothek, und Sie sind in Ordnung mit einer Abnahme der .NET-API-Oberfläche auf Ihre Bibliothek zugreifen können.
Verwenden .NET-Core-Bibliothek, wenn Sie möchten, zu erhöhen .NET-API-Oberfläche auf Ihre Bibliothek zugreifen können, und Sie sind in Ordnung mit, so dass nur .NET-Core-apps kompatibel zu sein mit Ihrer Bibliothek.
Beispielsweise eine Bibliothek, die Ziele .NET-Standard 1.3 kompatibel mit apps, Ziel .NET Framework 4.6, .NET Core 1.0, Universal-Windows-Plattform 10.0, und jede andere Plattform, die das unterstützt .NET-Standard 1.3. Die Bibliothek keinen Zugriff auf einige Teile der .NET-API, obwohl. Zum Beispiel, die
Microsoft.NETCore.CoreCLR
Paket kompatibel ist .NET-Core, aber nicht mit .NET Standard.Der Paket-basierte frameworks Abschnitt hier beschreibt den Unterschied.
Kompatibilität: Bibliotheken, Ziel .NET-Standard ausgeführt .NET-Standard konforme Laufzeitumgebung, wie .NET Core .NET Framework, Mono/Xamarin. Auf der anderen Seite, die Bibliotheken, das Ziel .NET Core laufen nur auf den .NET-Core-runtime.
API-Fläche: .NET-Standard-Bibliotheken kommen mit allem, was in
NETStandard.Library
während .NET-Core libraries kommen mit allem, was inMicrosoft.NETCore.App
. Letzteres umfasst etwa 20 weiteren Bibliotheken, von denen wir einige hinzufügen können manuell unserer .NET-Standard-Bibliothek (wieSystem.Threading.Thread
) und von denen einige nicht kompatibel sind mit den .NET Standard (wieMicrosoft.NETCore.CoreCLR
).Auch .NET-Core-Bibliotheken, die angeben, eine Laufzeit und sind mit einer Anwendung Modell. Das ist wichtig, um zum Beispiel unit-test class libraries lauffähig.
Ignorieren Bibliotheken für einen moment, der Grund, dass .NET-Standard existiert, ist für die Portabilität; es definiert eine Reihe von APIs, die .NET-Plattformen einverstanden zu implementieren. Jede Plattform implementiert .NET Standard ist kompatibel mit den Bibliotheken das Ziel .NET Standard. Eine dieser Plattformen kompatibel ist .NET Core.
Kommen wir zurück zu den Bibliotheken, die .NET-Standard-Bibliothek-Vorlagen vorhanden sind, um die Ausführung auf mehrere Laufzeiten (auf Kosten der API-Fläche). Obversely, die .NET-Core-Bibliothek-Vorlagen existieren, um den Zugriff der API-Oberfläche (auf Kosten der Kompatibilität) und geben Sie eine Plattform für das Sie erstellen Sie eine ausführbare Datei.
InformationsquelleAutor der Antwort Shaun Luttin
Einen .Net Core Class Library ist gebaut auf der .Net Standard. Wenn Sie möchten, implementieren Sie eine Bibliothek, die die portable zu den .Net Framework.Net Core und Xamarinwählen Sie ein .Net Standard Library
.Net Core wird letztlich umzusetzen .Net-Standard 2 (Xamarin und .Net Framework)
.Net CoreXamarin und .Net Framework kann daher ermittelt werden, wie Aromen von .Net Standard
Zukunftssicheren Anwendungen für code-sharing und reuse , Sie würde eher zu implementieren .Net-Standard-Bibliotheken.
Microsoft empfiehlt außerdem, dass Sie verwenden .NET Standard statt Portable Class Libraries.
Zitat MSDN, als maßgebliche Quelle, .Net Standard soll Eine Bibliothek, Sie Alle zu Knechten. Da Bilder mehr als tausend Worte, im folgenden wird die Dinge sehr klar:
1. Ihre aktuelle Anwendungs-Szenario (fragmentiert)
Wie die meisten von uns, sind Sie wahrscheinlich in der situation unten:
(.Net Framework Xamarin und jetzt .Net-Core-aromatisiert-Anwendungen)
2. Was die .Net-Standard-Bibliothek wird es ermöglichen, für Sie (framework-übergreifende Kompatibilität)
Umsetzung ein .Net Standard Library kann code-sharing über all diese verschiedenen Geschmacksrichtungen:
Für die ungeduldigen:
und Xamarin. Für .NET Core, das sind viele der vorhandenen APIs
angefordert haben.
tooling Geschichte für den Bau von multi-Plattform .NET-Bibliotheken.
Für eine Tabelle, um zu helfen, zu verstehen, was die höchste version .NET-Standard, können Sie als Ziel, auf dessen Grundlage .NET-Plattformen, die Sie betreiben wollen, head over hier.
Quellen: MSDN: Einführung .Net Standard
InformationsquelleAutor der Antwort user919426
Also die kurze Antwort wäre:
InformationsquelleAutor der Antwort Joe
.Net Framework und .Net Core sind zwei verschiedene Implementierungen .Net-runtime. Die beiden Kern und Rahmen (aber vor allem-Framework) haben unterschiedliche profile, die auch größer oder kleiner (oder einfach anders) Auswahl der vielen APIs und Baugruppen, die Microsoft geschaffen hat .Netto, je nachdem, wo Sie installiert sind und in welches Profil. Zum Beispiel gibt es einige verschiedene APIs zur Verfügung, die in Universal Windows apps als in der "normalen" Windows-Profil. Auch auf Windows, müssen Sie möglicherweise die "Client" - Profil-vs die "Full" - Profil. Darüber hinaus gibt es andere Implementierungen (wie Mono) , haben Ihre eigenen Sätze von Bibliotheken.
.Net Standard ist eine Spezifikation für die Sätze von API-Bibliotheken und-Baugruppen zur Verfügung stehen muss. Eine app geschrieben .Net-Standard 1.0 sollte in der Lage sein zu kompilieren und führen Sie mit einer beliebigen version von Framework, Core, Mono, etc, wirbt Unterstützung für die .Net-Standard 1.0 Sammlung von Bibliotheken. Ähnliches gilt für .Net-Standard 1.1, 1.5, 1.6, 2.0, usw. Solange die Laufzeitumgebung bietet Unterstützung für diese version der Standard, können Sie kompilieren und führen Sie es.
Projekt zielt auf eine version der Standard nicht in der Lage sein, um die Verwendung von features, die nicht enthalten sind in dieser überarbeitung des Standards. Dies bedeutet nicht, Sie können nicht nehmen Sie Abhängigkeiten von anderen Assemblys oder APIs veröffentlicht, die von anderen Anbietern (ie: Artikel, die über NuGet). Aber es bedeutet, dass alle Abhängigkeiten, die Sie nehmen müssen, auch die Unterstützung für Ihre version .Net Standard. .Netz-Standard entwickelt sich schnell, aber es ist immer noch neu genug, und kümmert sich genug über einige der kleineren runtime-profile, dass diese Einschränkung kann fühlen stickig.
Auf der anderen Seite, eine app, die sich gezielt an die Standard - sollte werden können, werden in deployment-Situationen, denn in der Theorie kann es laufen mit dem Core-Framework, Mono, etc. Für ein Klasse-Bibliothek-Projekt sucht weite Verbreitung, das ist ein attraktives Versprechen. Für ein Klasse-Bibliothek-Projekt hauptsächlich für interne Zwecke, es kann nicht so viel von einer Besorgnis.
.Net-Standard kann auch nützlich sein in Situationen, in denen der SysAdmin-team ist zu wollen, um aus ASP.Net auf Windows um ASP.Net für .Net Core auf Linux für philosophische oder Kostengründen, aber die Entwicklung der Mannschaft möchte um weiter zu arbeiten, gegen .Net Framework in Visual Studio auf Windows.
InformationsquelleAutor der Antwort Joel Coehoorn
.Net-Standard besteht vor allem zur Verbesserung der code-sharing und machen Sie den APIs zur Verfügung in jedem .Net-Implementierung konsistenter.
Beim erstellen von Bibliotheken, die wir haben können Ziel as.Net Standard 2.0, so dass die Bibliothek erstellt werden würde compaitible mit verschiedenen Versionen .Net Framework, einschließlich .Net Core,Mono..
InformationsquelleAutor der Antwort ARP
.NET Standard: sehen Sie es als eine große standard-Bibliothek. Bei der Verwendung dieses als Abhängigkeit können Sie nur vornehmen, Bibliotheken (.DLLs), nicht ausführbare Dateien. Eine Bibliothek machte mit .NET-standard als Abhängigkeit Hinzugefügt werden können, um eine Xamarin.Android, Xamarin.iOS, ein .NET Core Windows/OSX/Linux-Projekt.
.NET Core: betrachten Sie es als die Fortsetzung der alten .NET framework, nur es ist opensource und einige Sachen noch nicht umgesetzt und andere verworfen. Es erweitert die .NET-standard mit extra-Funktionen, aber läuft nur auf Desktops. Beim hinzufügen dieses als Abhängigkeit, die Sie machen können runnable-apps auf Windows, Linux und OSX. (Obwohl die Konsole nur für jetzt, keine GUIs). So .NET Core = .NET Standard + Desktop-spezifische Sachen.
Auch UWP verwendet und die neue ASP.NET core verwendet es als eine Abhängigkeit zu.
InformationsquelleAutor der Antwort