Was ist ".NET Core"?

322

Kürzlich wurde in einem offiziellen .NET Framework-Blog angekündigt, dass .NET Core Open Source wird .

Ironischerweise erwähnt der Autor , dass was .NET - Core im nächsten Post erläutert werden wird. Einige weitere Details werden in einem anderen Ankündigungsbeitrag erwähnt .

Aus einem mitgelieferten Diagramm:

.NET Core-Diagramm

und Artikel Text selbst würde ich annehmen, dass .NET Core (neben offensichtlichen Dingen wie Open Source) eine modulare Neuimplementierung des vollständigen .NET ist. Dh Framework-Komponenten werden nach Bedarf geladen, ähnlich wie NuGet-Pakete jetzt geladen werden. Und jetzt ist ASP.NET 5 eines der Module, die bereits implementiert sind. Ist mein Verständnis von .NET Core korrekt? Vielleicht fehlt mir etwas?


Ich habe kürzlich einen Artikel gefunden, den ich sowohl kurz als auch sehr gut fand. Es behandelt .NET Standard, .NET Core und .NET Framework sowie deren Beziehung. Ich empfehle es sehr.

Petr Abdulin
quelle
5
Es gibt hier einen neuen Blog-Beitrag darüber blogs.msdn.com/b/dotnet/archive/2014/12/04/…, aber dieses Diagramm ist immer noch schwer zu verstehen. Bedeutet dies, dass WPF und WinForms beispielsweise .NET Core nicht verwenden können?
dodgy_coder
@dodgy_coder Ich denke, sie werden letztendlich nur Store Apps und ASP.NET 5 als erste eine neue Framework-Architektur verwenden.
Petr Abdulin
1
@dodgy_coder, es ist richtig. Derzeit sind WPF- und WinForms-Apps nicht auf den .net-Kern portierbar. Sie können in universelle Windows-Apps umgewandelt werden. Siehe dies: blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev

Antworten:

153

Aus dem .NET-Blog Ankündigung der .NET 2015-Vorschau: Eine neue Ära für .NET :

.NET Core besteht aus zwei Hauptkomponenten. Es enthält eine kleine Laufzeit, die aus derselben Codebasis wie die .NET Framework-CLR erstellt wird. Die .NET Core-Laufzeit enthält denselben GC und dieselbe JIT (RyuJIT), jedoch keine Funktionen wie Anwendungsdomänen oder Codezugriffssicherheit. Die Laufzeit wird über NuGet als Teil des Pakets [ASP.NET Core] bereitgestellt.

.NET Core enthält auch die Basisklassenbibliotheken. Diese Bibliotheken entsprechen weitgehend dem Code der .NET Framework-Klassenbibliotheken, wurden jedoch berücksichtigt (Entfernen von Abhängigkeiten), damit wir einen kleineren Satz von Bibliotheken ausliefern können. Diese Bibliotheken werden als System geliefert. * NuGet-Pakete auf NuGet.org.

Und:

[ASP.NET Core] ist die erste Workload, die .NET Core übernommen hat. [ASP.NET Core] wird sowohl auf .NET Framework als auch auf .NET Core ausgeführt. Ein Schlüsselwert von [ASP.NET Core] ist, dass es auf mehreren Versionen von [.NET Core] auf demselben Computer ausgeführt werden kann. Website A und Website B können auf zwei verschiedenen Versionen von .NET Core auf demselben Computer ausgeführt werden oder sie können dieselbe Version verwenden.

Kurz gesagt: Zunächst gab es Microsoft .NET Framework , das aus einer Laufzeit, die Anwendungs- und Bibliothekscode ausführt, und einer nahezu vollständig dokumentierten Standardklassenbibliothek besteht .

Die Laufzeit ist die Common Language Runtime , die die Common Language Infrastructure implementiert und mit dem JIT-Compiler zusammenarbeitet , um den CIL-Bytecode (ehemals MSIL) auszuführen .

Die Spezifikation und Implementierung von .NET durch Microsoft war aufgrund seiner Geschichte und seines Zwecks sehr Windows- und IIS-zentriert und "fett". Es gibt Variationen mit weniger Bibliotheken, Namespaces und Typen , aber nur wenige davon waren für die Web- oder Desktop-Entwicklung nützlich oder aus rechtlicher Sicht schwierig zu portieren .

Um eine Nicht-Microsoft-Version von .NET bereitzustellen, die auf Nicht-Windows-Computern ausgeführt werden kann, musste eine Alternative entwickelt werden. Dazu muss nicht nur die Laufzeit portiert werden, sondern auch die gesamte Framework-Klassenbibliothek, um eine gute Akzeptanz zu erzielen. Um vollständig unabhängig von Microsoft zu sein, ist außerdem ein Compiler für die am häufigsten verwendeten Sprachen erforderlich.

Mono ist eine der wenigen, wenn nicht die einzige alternative Implementierung der Laufzeit , die neben Windows auf verschiedenen Betriebssystemen ausgeführt wird, fast alle Namespaces aus der Framework Class Library ab .NET 4.5 und einem VB- und C # -Compiler .

Geben Sie .NET Core ein: eine Open-Source-Implementierung der Laufzeit und eine minimale Basisklassenbibliothek. Alle zusätzlichen Funktionen werden über NuGet-Pakete bereitgestellt, wobei die spezifische Laufzeit, Framework-Bibliotheken und Pakete von Drittanbietern mit der Anwendung selbst bereitgestellt werden.

ASP.NET Core ist eine neue Version von MVC und WebAPI, die zusammen mit einer dünnen HTTP-Server-Abstraktion gebündelt ist und auf der .NET Core-Laufzeit ausgeführt wird - aber auch auf .NET Framework.

CodeCaster
quelle
4
Oh, so habe ich es verpasst! Es war tatsächlich unten in der Zeitleiste des Blogs! So eine Schande ..
Petr Abdulin
17
Es ist alles ziemlich neues Zeug und kaum beschrieben, ich denke du hast eine gute Frage gestellt. :)
CodeCaster
3
Bei einem zweiten Gedanken scheint es nicht der "nächste Beitrag" zu sein, da die Beschreibung noch ziemlich kurz ist.
Petr Abdulin
2
Ist es nicht im Grunde das, was vNext uns gebracht hat?
ps2goat
3
Wir machen das, seit sie das Framework über Nuget veröffentlichen. Die Problemumgehung in diesem Beitrag ist nicht erforderlich.
ps2goat
84

Es ist eine Teilmenge von .NET Framework, die mit der Compact Framework Edition gestartet wurde. Es entwickelte sich zu Silverlight, Windows Store und Windows Phone. Es konzentrierte sich darauf, die Bereitstellung klein zu halten, geeignet für schnelle Downloads und Geräte mit begrenzten Speicherfunktionen. Und es ist einfacher, auf Nicht-Windows-Plattformen zuzugreifen, und dies war sicherlich der Grund, warum es als Open-Source-Edition ausgewählt wurde. Die "schwierigen" und "teuren" Teile der CLR und der Basisklassenbibliotheken werden weggelassen.

Andernfalls ist es immer leicht zu erkennen, wann Sie auf eine solche Framework-Version abzielen, da viele Goodies fehlen. Sie verwenden einen bestimmten Satz von Referenzassemblys, die nur das anzeigen, was von der Laufzeit unterstützt wird. Es wird auf Ihrem Computer im C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCoreVerzeichnis gespeichert .


Update: Nach der .NET Core 2.0-Version habe ich einige repräsentative Zahlen gesehen, die einen anständigen Einblick geben. In den letzten zwei Jahren haben sie hart daran gearbeitet, Framework-APIs auf .NET Core zurück zu portieren. .NET Core 1.0 unterstützte ursprünglich 13.000 APIs. In .NET Core 2.0 wurden 20.000 APIs hinzugefügt, sodass insgesamt 32.000 APIs verfügbar sind und etwa 70% der vorhandenen NuGet-Pakete portiert werden können. Es gibt eine Reihe von APIs, die zu stark mit Windows verbunden sind, um einfach auf Linux und MacOS portiert zu werden. Durch das kürzlich veröffentlichte Windows-Kompatibilitätspaket werden weitere 20.000 APIs hinzugefügt.

Hans Passant
quelle
4
Aus dem Blog-Beitrag würde ich nicht sagen, wie dies wie eine andere "kompakte" Framework-Version aussieht. Angekündigt .NET Corewird Version 5.0, die höher ist als das neueste vollständige Framework. Ich nehme an, damit meinen sie, dass das etwas anderes ist.
Petr Abdulin
5
Ich habe gerade den Verlauf der .NETCore-Version beschrieben. Nichts Neues unter der Sonne, es gibt es schon lange. Änderungen in 5.0 sind inkrementell. Der neue RyuJIT x64-Jitter ist der einzige, an den ich derzeit denken kann. Nur die Lizenzänderung ist wirklich neu :)
Hans Passant
3
Ich habe dich verstanden. Obwohl ich immer noch denke, dass die Ankündigung der Framework-Teilmenge als nächste Ära von .NET etwas mutig ist.
Petr Abdulin
50

Ich habe kürzlich einen Artikel gefunden, den ich sowohl kurz als auch sehr gut fand. Es behandelt .NET Standard, .NET Core und .NET Framework sowie deren Beziehung. Ich empfehle es sehr. Leider habe ich keine Zeit, mich anzupassen und es hier zu platzieren.

Originaler Antwortinhalt unten:


Basierend auf dem neuesten offiziellen Eintrag zu diesem Thema sind hier einige wichtige Punkte, wie ich sie sehe:

.NET Core ist im Wesentlichen ein Zweig von .NET Framework, dessen Implementierung auch im Hinblick auf Factoring-Probleme optimiert ist.

Wir denken, dass .NET Core weder für .NET Native noch für ASP.NET 5 spezifisch ist - die BCL und die Laufzeiten sind universell einsetzbar und modular aufgebaut. Als solches bildet es die Grundlage für alle zukünftigen .NET-Vertikalen.

.NET Native und ASP.NET 5 sind also nur Testobjekte für die neue Framework-Konfiguration. Dies liegt möglicherweise daran, dass sie sehr unterschiedlich sind:

Geben Sie hier die Bildbeschreibung ein

Sehen Sie, sie brauchen sogar separate Low-Levels, aber ein Großteil der BCL ist immer noch üblich:

Wir denken, dass .NET Core weder für .NET Native noch für ASP.NET 5 spezifisch ist - die BCL und die Laufzeiten sind universell einsetzbar und modular aufgebaut. Als solches bildet es die Grundlage für alle zukünftigen .NET-Vertikalen.

Das heißt, magentafarbene Rechtecke oben werden mit neuen App-Modellen massiv hinzugefügt, aber die Basis bleibt üblich.

NuGet-Bereitstellung:

Im Gegensatz zu .NET Framework wird die .NET Core-Plattform als Satz von NuGet-Paketen geliefert. Wir haben uns für NuGet entschieden, da sich dort bereits der Großteil des Bibliotheksökosystems befindet.

Beziehung zu aktuellen Rahmenbedingungen:

Für Visual Studio 2015 möchten wir sicherstellen, dass .NET Core eine reine Teilmenge von .NET Framework ist. Mit anderen Worten, es würde keine Funktionslücken geben. Nach der Veröffentlichung von Visual Studio 2015 erwarten wir, dass .NET Core schneller als .NET Framework veröffentlicht wird. Dies bedeutet, dass es Zeitpunkte geben wird, an denen eine Funktion nur auf den .NET Core-basierten Plattformen verfügbar ist.

Zusammenfassung:

Die .NET Core-Plattform ist ein neuer .NET-Stack, der für die Open Source-Entwicklung und die agile Bereitstellung auf NuGet optimiert ist. Wir arbeiten mit der Mono-Community zusammen, um es unter Windows, Linux und Mac großartig zu machen, und Microsoft wird es auf allen drei Plattformen unterstützen.

Wir behalten die Werte bei, die .NET Framework für die Entwicklung von Unternehmensklassen bietet. Wir bieten .NET Core-Distributionen an, die eine Reihe von NuGet-Paketen darstellen, die wir gemeinsam getestet und unterstützt haben. Visual Studio bleibt Ihre zentrale Anlaufstelle für die Entwicklung. Für den Konsum von NuGet-Paketen, die Teil einer Distribution sind, ist keine Internetverbindung erforderlich.

Grundsätzlich kann dies als .NET 4.6 mit einem geänderten Verteilungsmodell betrachtet werden, das gleichzeitig Open Source wird.

Petr Abdulin
quelle
22

Die aktuelle Dokumentation enthält eine gute Erklärung zu .NET Core, zu verwendenden Bereichen usw. Die folgenden Eigenschaften definieren .NET Core am besten:

Flexible Bereitstellung : Kann in Ihre App aufgenommen oder benutzer- oder maschinenweit nebeneinander installiert werden.

Plattformübergreifend : Läuft unter Windows, MacOS und Linux; kann auf andere Betriebssysteme portiert werden. Die unterstützten Betriebssysteme, CPUs und Anwendungsszenarien werden im Laufe der Zeit von Microsoft, anderen Unternehmen und Einzelpersonen bereitgestellt.

Befehlszeilentools : Alle Produktszenarien können über die Befehlszeile ausgeführt werden.

Kompatibel : .NET Core ist über die .NET Standard Library mit .NET Framework, Xamarin und Mono kompatibel.

Open Source : Die .NET Core-Plattform ist Open Source und verwendet MIT- und Apache 2-Lizenzen. Die Dokumentation ist unter CC-BY lizenziert. .NET Core ist ein .NET Foundation-Projekt.

Von Microsoft unterstützt : .NET Core wird von Microsoft gemäß .NET Core-Unterstützung unterstützt

Und hier ist, was .NET Core beinhaltet:

Eine .NET-Laufzeit, die ein Typsystem, das Laden von Assemblys, einen Garbage Collector, native Interoperabilität und andere grundlegende Dienste bereitstellt.

Eine Reihe von Framework-Bibliotheken, die primitive Datentypen, Anwendungszusammensetzungstypen und grundlegende Dienstprogramme bereitstellen.

Eine Reihe von SDK-Tools und Sprachcompilern, die die Basisentwicklererfahrung ermöglichen und im .NET Core SDK verfügbar sind.

Der 'Dotnet'-Anwendungshost, mit dem .NET Core-Anwendungen gestartet werden. Es wählt die Laufzeit aus und hostet die Laufzeit, stellt eine Richtlinie zum Laden von Assemblys bereit und startet die App. Der gleiche Host wird auch verwendet, um SDK-Tools auf die gleiche Weise zu starten.

einstellen
quelle
19

.NET Core ist eine neue plattformübergreifende Implementierung von .NET-Standards (ECMA 335), die Mono ähnelt, jedoch von Microsoft selbst durchgeführt wird.

Siehe docs.microsoft.com

Fernost
quelle
18

Microsoft erkannte das zukünftige Web-Open-Source-Paradigma und entschied sich, .NET für andere Betriebssysteme zu öffnen. .NET Core ist ein .NET Framework für Mac und Linux. Es ist ein "leichtes" .NET Framework, daher fehlen einige Funktionen / Bibliotheken.

Unter Windows würde ich weiterhin .NET Framework und Visual Studio 2015 ausführen. .NET Core ist mit der Open Source-Welt wie Node.js , npm, Yeoman , Docker usw. besser vertraut .

Mit Visual Studio Code + .NET Core können Sie vollwertige Websites und RESTful-APIs unter Mac oder Linux entwickeln, was zuvor nicht möglich war. Wenn Sie also Mac oder Ubuntu lieben und ein .NET-Entwickler sind, richten Sie es ein.

Für Mono vs. .NET Core wurde Mono als .NET Framework für Linux entwickelt, das jetzt von Microsoft (Firma Xamarin ) erworben und in der mobilen Entwicklung verwendet wird. Möglicherweise führt Microsoft Mono zu .NET Core zusammen / migriert es. Ich würde mir jetzt keine Sorgen um Mono machen.

Manish Jain
quelle
12

Ich habe heute versucht, ein neues Projekt in Visual Studio 2017 zu erstellen (kürzlich von Visual Studio 2015 aktualisiert) und dabei neue Auswahlmöglichkeiten für den Projekttyp festgestellt. Entweder sind sie neu oder es ist schon eine Weile her, seit ich ein neues Projekt gestartet habe !! :) :)

Visual Studio Screenshot

Ich bin auf diesen Dokumentationslink gestoßen und fand ihn sehr nützlich, also teile ich ihn. Die Details der Aufzählungszeichen finden Sie auch im Artikel. Ich poste hier nur Kugeln:

Sie sollten .NET Core für Ihre Serveranwendung verwenden, wenn:

You have cross-platform needs.
You are targeting microservices.
You are using Docker containers.
You need high performance and scalable systems.
You need side by side of .NET versions by application.

Sie sollten .NET Framework für Ihre Serveranwendung verwenden, wenn:

Your application currently uses .NET Framework (recommendation is to extend instead of migrating)
You need to use third-party .NET libraries or NuGet packages not available for .NET Core.
You need to use .NET technologies that are not available for .NET Core.
You need to use a platform that doesnt support .NET Core.

Dieser Link enthält ein Glossar der .NET-Begriffe.

joym8
quelle
11

Von der Microsoft-Website :

.NET Core bezieht sich auf verschiedene Technologien, einschließlich .NET Core, ASP.NET Core und Entity Framework Core.

Diese Technologien unterscheiden sich von nativem .NET darin, dass sie mit CoreCLR-Laufzeit (in der universellen Windows-Plattform verwendet ) ausgeführt werden.

Wie Sie in Ihrer Frage erwähnt haben, ist .NET Core nicht nur Open Source, sondern auch portabel [läuft unter MacOS, Windows und Linux]

Die Interna von .NET Core sind außerdem so optimiert, dass keine anderen Module aus der Kernbibliothek verwendet werden, es sei denn, dies wird von der Anwendung benötigt.

Salah Alshaal
quelle
4
".NET Core bezieht sich auf verschiedene Technologien, einschließlich .NET Core" ... großartiges Zeug
Kieren Johnstone
3

Microsoft hat gerade .NET Core v 3.0 angekündigt, eine stark verbesserte Version von .NET Core.

Weitere Informationen finden Sie in diesem großartigen Artikel: Unterschied zwischen .NET Framework und .NET Core ab April 2019.

itsikha
quelle
3
Von Nur-Link-Antworten und hauptsächlich auf Meinungen basierenden Antworten wird dringend abgeraten . Bitte sehen Sie meta.stackexchange.com/a/8259
Doppel-Piepton
Verstanden, ich habe den Meinungsteil bearbeitet. Danke, dass du mich informiert hast.
Itsikha
1
Auf welche Weise verbessert? Können Sie eine Zusammenfassung der Ihrer Meinung nach wichtigsten Änderungen und Ergänzungen geben?
Peter Mortensen
3

.NET Core ist ein kostenloses und Open-Source-Framework für verwaltete Computersoftware für Windows-, Linux- und MacOS-Betriebssysteme. Es ist ein plattformübergreifender Open Source-Nachfolger von .NET Framework.

.NET Core-Anwendungen werden unter Windows, Linux und macOS unterstützt. Kurz gesagt, .NET Core ähnelt .NET Framework, ist jedoch plattformübergreifend, dh es ermöglicht die Ausführung der .NET-Anwendungen unter Windows, Linux und MacOS. .NET Framework-Anwendungen können nur auf dem Windows-System ausgeführt werden. Der grundlegende Unterschied zwischen .NET Framework und .NET Core besteht darin, dass .NET Core plattformübergreifend ist und .NET Framework nur unter Windows ausgeführt wird.

Darüber hinaus verfügt .NET Core über eine integrierte Abhängigkeitsinjektion von Microsoft, und Sie müssen keine Software / DLL-Dateien von Drittanbietern für die Abhängigkeitsinjektion verwenden.

Waleed Naveed
quelle
1
Können Sie die Abhängigkeitsinjektion näher erläutern? Was bedeutet das in diesem Zusammenhang eigentlich? Beziehen Sie sich auf bestimmte Frameworks? Haben Sie Referenzen / Links?
Peter Mortensen
1

.NET Core ist eine Open Source- und plattformübergreifende Version von .NET. Microsoft-Produkte waren neben den großen Fähigkeiten, die sie haben, für normale Benutzer immer teuer, insbesondere für Endbenutzer von Produkten, die mit .NET-Technologien hergestellt wurden.

Die meisten Low-Level-Kunden bevorzugen Linux als Betriebssystem und möchten vor .NET Core trotz der großen Fähigkeiten von Microsoft keine Microsoft-Technologien verwenden. Nach der .NET Core-Produktion ist dieses Problem jedoch vollständig gelöst und wir können unsere Kunden zufriedenstellen, ohne ihr Betriebssystem usw. zu berücksichtigen.

Sajadre
quelle
Es ist nicht vollständig gelöst. Es wird Ihnen schwer fallen, eine Windows Forms- oder WPF- Anwendung unter Linux zu verwenden.
Peter Mortensen
0

.NET Core ist eine Open Source- und plattformübergreifende Version von .NET Framework.

JEuvin
quelle