Co to jest „.NET Core”?

323

Niedawno w oficjalnym blogu .NET Framework ogłoszono, że .NET Core przejdzie na oprogramowanie open source .

Jak na ironię autor wspomina, że czym jest .NET Core zostanie wyjaśniony w następnym poście. Więcej szczegółów podano w innym poście z ogłoszeniami .

Z dostarczonego schematu:

Schemat .NET Core

i sam tekst artykułów, zakładam, że .NET Core (oprócz oczywistych rzeczy takich jak open source) jest modułową re-implementacją pełnego .NET. Komponenty frameworka, tj. Ładowane są teraz pakiety NuGet. A teraz ASP.NET 5 jest jednym z modułów, który jest już zaimplementowany. Czy moje rozumienie .NET Core jest prawidłowe? Może coś mi umknęło?


Znalazłem ostatni artykuł, który uznałem za krótki i bardzo dobry. Obejmuje .NET Standard, .NET Core i .NET Framework i ich relacje. Gorąco polecam.

Petr Abdulin
źródło
5
Jest tu nowy post na blogu blogs.msdn.com/b/dotnet/archive/2014/12/04/…, ale nadal trudno zrozumieć ten schemat. Czy to oznacza, że ​​WPF i WinForm nie mogą na przykład używać .NET Core?
dodgy_coder,
@dodgy_coder Wydaje mi się, że w końcu po prostu Store Apps i ASP.NET 5 jako pierwsze wykorzystają nową architekturę frameworka.
Petr Abdulin,
1
@dodgy_coder, ma rację. Obecnie aplikacje WPF i WinForm nie są przenośne na rdzeń .net. Można je przebudować na uniwersalne aplikacje systemu Windows. Zobacz: blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev

Odpowiedzi:

154

Z blogu .NET Zapowiedź .NET 2015 Preview: Nowa era dla .NET :

.NET Core ma dwa główne komponenty. Zawiera mały środowisko uruchomieniowe zbudowane z tej samej bazy kodów, co CLR .NET Framework. Środowisko wykonawcze .NET Core obejmuje ten sam GC i JIT (RyuJIT), ale nie obejmuje funkcji takich jak Domeny aplikacji lub Zabezpieczenia dostępu do kodu. Środowisko wykonawcze jest dostarczane za pośrednictwem NuGet, jako część pakietu [ASP.NET Core].

.NET Core obejmuje również biblioteki klas podstawowych. Te biblioteki są w dużej mierze tym samym kodem co biblioteki klas .NET Framework, ale zostały uwzględnione (usunięcie zależności), aby umożliwić nam dostarczenie mniejszego zestawu bibliotek. Te biblioteki są dostarczane jako System. * Pakiety NuGet na NuGet.org.

I:

[ASP.NET Core] to pierwsze obciążenie, które przyjęło platformę .NET Core. [ASP.NET Core] działa zarówno w .NET Framework, jak i .NET Core. Kluczową wartością [ASP.NET Core] jest to, że może on działać w wielu wersjach [.NET Core] na tym samym komputerze. Witryna A i witryna B mogą działać na dwóch różnych wersjach .NET Core na tym samym komputerze lub mogą korzystać z tej samej wersji.

W skrócie: po pierwsze, powstał Microsoft .NET Framework , który składa się z środowiska wykonawczego wykonującego kod aplikacji i biblioteki oraz prawie w pełni udokumentowanej biblioteki klas standardowych .

Środowisko wykonawcze to środowisko uruchomieniowe języka wspólnego , które implementuje infrastrukturę języka wspólnego , współpracuje z kompilatorem JIT w celu uruchomienia kodu bajtowego CIL (wcześniej MSIL) .

Specyfikacja i implementacja platformy .NET firmy Microsoft były, biorąc pod uwagę jej historię i przeznaczenie, bardzo skoncentrowane na Windows i IIS i „tłuste”. Istnieją odmiany z mniejszą liczbą bibliotek, przestrzeni nazw i typów , ale niewiele z nich było przydatnych do tworzenia stron internetowych lub komputerów stacjonarnych lub trudno jest je przenieść z prawnego punktu widzenia .

Aby więc dostarczyć wersję .NET firmy innej niż Microsoft, która mogłaby działać na komputerach innych niż Windows, należało opracować alternatywę. W tym celu należy przenieść nie tylko środowisko uruchomieniowe, ale także całą bibliotekę klas frameworka. Ponadto, aby być w pełni niezależnym od Microsoft, wymagany będzie kompilator dla najczęściej używanych języków.

Mono jest jedną z niewielu, jeśli nie jedyną alternatywną implementacją środowiska uruchomieniowego, które działa w różnych systemach operacyjnych oprócz Windows, prawie wszystkie przestrzenie nazw z biblioteki klas Framework od .NET 4.5 oraz kompilatora VB i C # .

Wprowadź .NET Core: implementacja środowiska wykonawczego typu open source i minimalna biblioteka klas podstawowych. Cała dodatkowa funkcjonalność jest dostarczana za pośrednictwem pakietów NuGet, wdrażając określone środowisko wykonawcze, biblioteki frameworku i pakiety innych firm za pomocą samej aplikacji.

ASP.NET Core to nowa wersja MVC i WebAPI, dołączona wraz z cienką abstrakcją serwera HTTP, która działa w środowisku uruchomieniowym .NET Core - ale także w .NET Framework.

CodeCaster
źródło
4
Och, tak mi brakowało! To było faktycznie poniżej osi czasu bloga! Taki wstyd ...
Petr Abdulin
17
To wszystko całkiem nowe rzeczy i ledwo opisane, myślę, że zadałeś dobre pytanie. :)
CodeCaster,
3
Z drugiej strony wydaje się, że nie jest to „następny post”, ponieważ opis jest wciąż dość krótki.
Petr Abdulin
2
Czy nie jest to w zasadzie to, co przynosi nam vNext?
ps2goat
3
Robimy to, odkąd zaczęli publikować framework za pośrednictwem nuget. Nie ma potrzeby obejścia tego postu.
ps2goat
84

Jest to podzestaw systemu .NET Framework, rozpoczęty od edycji Compact Framework. Rozwinął się w Silverlight, Windows Store i Windows Phone. Skoncentrowano się na utrzymaniu niewielkiego wdrożenia, odpowiedniego do szybkiego pobierania i urządzeń z ograniczonymi możliwościami przechowywania. Łatwiej jest go wychowywać na platformach innych niż Windows, a to z pewnością był powód, dla którego został wybrany jako wersja open source. „Trudne” i „drogie” części CLR i biblioteki klas podstawowych są pomijane.

W przeciwnym razie zawsze jest łatwo rozpoznać, kiedy celujesz w taką wersję frameworka, ponieważ brakuje wielu gadżetów. Będziesz używać odrębnego zestawu zestawów referencyjnych, które ujawniają tylko to, co jest obsługiwane przez środowisko wykonawcze. Jest przechowywany na twoim komputerze w C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCorekatalogu.


Aktualizacja: po wydaniu .NET Core 2.0 widziałem kilka reprezentatywnych liczb, które dają przyzwoity wgląd. Przez ostatnie dwa lata ciężko pracowali nad back-portingiem frameworkowych interfejsów API do .NET Core. .NET Core 1.0 pierwotnie obsługiwał 13 000 interfejsów API. .NET Core 2.0 dodał 20 000 interfejsów API, co w sumie daje 32 000 i pozwala na przeniesienie około 70% istniejących pakietów NuGet. Istnieje zestaw interfejsów API, które są zbyt mocno związane z systemem Windows, aby można je było łatwo przenieść na system Linux i MacOS. Objęty niedawno wydanym pakietem zgodności systemu Windows, dodaje kolejne 20 000 interfejsów API.

Hans Passant
źródło
4
Z postu na blogu nie powiedziałbym, jak to wygląda jako kolejna „kompaktowa” wersja frameworka. Ogłoszono .NET Corewersję 5.0, która jest wyższa niż najnowsze pełne środowisko. Zakładam, że mają na myśli, że to coś innego.
Petr Abdulin
5
Właśnie opisałem historię wersji .NETCore. Nic nowego pod słońcem, istnieje już od dłuższego czasu. Zmiany w wersji 5.0 są stopniowe, nowy jitter RyuJIT x64 jest jedynym, o którym mogę teraz myśleć. Tylko zmiana licencji jest naprawdę nowa :)
Hans Passant
3
Rozumiem o co ci chodzi. Chociaż nadal uważam, że ogłaszanie podzbioru frameworka jako kolejnej ery platformy .NET jest nieco odważne.
Petr Abdulin
50

Znalazłem ostatni artykuł, który uznałem za krótki i bardzo dobry. Obejmuje .NET Standard, .NET Core i .NET Framework oraz ich relacje. Gorąco polecam. Niestety nie mam czasu na dostosowanie się i umieszczenie go tutaj.

Oryginalna treść odpowiedzi poniżej:


Tak więc, w oparciu o najnowszy oficjalny wpis na ten temat, oto kilka kluczowych punktów, jakie widzę:

.NET Core jest zasadniczo rozwidleniem .NET Framework, którego implementacja jest również zoptymalizowana pod kątem problemów z faktoringiem.

Uważamy, że .NET Core nie jest specyficzny ani dla .NET Native, ani dla ASP.NET 5 - BCL i środowiska wykonawcze są ogólnego przeznaczenia i mają budowę modułową. Jako taki stanowi podstawę dla wszystkich przyszłych wertykalnych platform .NET.

Tak więc .NET Native i ASP.NET 5 to tylko „testowe” tematy dla nowej konfiguracji frameworka, częściowo dlatego, że są zupełnie inne:

Wpisz opis zdjęcia tutaj

Widzicie, potrzebują nawet osobnego niskiego poziomu, ale znaczna część BCL jest nadal powszechna:

Uważamy, że .NET Core nie jest specyficzny ani dla .NET Native, ani dla ASP.NET 5 - BCL i środowiska wykonawcze są ogólnego przeznaczenia i mają budowę modułową. Jako taki stanowi podstawę dla wszystkich przyszłych wertykalnych platform .NET.

Tzn. Magenta prostokąty na górze zostaną masowo dodane wraz z nowymi modelami aplikacji, ale podstawa pozostanie wspólna.

Wdrożenie NuGet:

W przeciwieństwie do .NET Framework, platforma .NET Core będzie dostarczana jako zestaw pakietów NuGet. Zdecydowaliśmy się na NuGet, ponieważ już tam znajduje się większość ekosystemu bibliotecznego.

Związek z obecnymi ramami:

W przypadku Visual Studio 2015 naszym celem jest upewnienie się, że .NET Core jest czystym podzbiorem .NET Framework. Innymi słowy, nie byłoby żadnych luk w funkcjach. Po wydaniu programu Visual Studio 2015 spodziewamy się, że .NET Core będzie działał szybciej niż .NET Framework. Oznacza to, że w pewnym momencie funkcja będzie dostępna tylko na platformach opartych na .NET Core.

Podsumowanie:

Platforma .NET Core to nowy stos .NET zoptymalizowany pod kątem rozwoju oprogramowania open source i zwinnego dostarczania w NuGet. Współpracujemy ze społecznością Mono, aby była świetna w systemach Windows, Linux i Mac, a Microsoft będzie ją obsługiwać na wszystkich trzech platformach.

Zachowujemy wartości, które .NET Framework wnosi do rozwoju klasy korporacyjnej. Będziemy oferować dystrybucje .NET Core, które stanowią zestaw pakietów NuGet, które przetestowaliśmy i które razem obsługujemy. Visual Studio pozostaje kompleksowym centrum rozwoju. Zużycie pakietów NuGet, które są częścią dystrybucji, nie wymaga połączenia z Internetem.

Zasadniczo można to uznać za platformę .NET 4.6 ze zmienionym modelem dystrybucji, który jednocześnie przechodzi w proces open source.

Petr Abdulin
źródło
22

Obecna dokumentacja zawiera dobre wyjaśnienie, czym jest .NET Core, obszary do wykorzystania i tak dalej. Następujące cechy najlepiej definiują .NET Core:

Elastyczne wdrażanie : może być zawarte w aplikacji lub instalowane równolegle na poziomie użytkownika lub maszyny.

Wieloplatformowy : Działa w systemach Windows, macOS i Linux; można przenieść na inne systemy operacyjne. Obsługiwane systemy operacyjne (OS), procesory i scenariusze aplikacji będą się rozwijać z czasem, dostarczone przez Microsoft, inne firmy i osoby fizyczne.

Narzędzia wiersza polecenia : Wszystkie scenariusze produktu można wykonywać z wiersza polecenia.

Kompatybilny : .NET Core jest kompatybilny z .NET Framework, Xamarin i Mono, poprzez .NET Standard Library.

Otwarte źródło : platforma .NET Core jest oprogramowaniem typu open source, wykorzystującym licencje MIT i Apache 2. Dokumentacja jest licencjonowana na licencji CC-BY. .NET Core to projekt .NET Foundation.

Obsługiwane przez Microsoft : .NET Core jest obsługiwany przez Microsoft, zgodnie z .NET Core Support

A oto, co obejmuje .NET Core:

Środowisko wykonawcze .NET, które zapewnia system typów, ładowanie zestawu, moduł wyrzucania elementów bezużytecznych, natywną interoperacyjność i inne podstawowe usługi.

Zestaw bibliotek frameworkowych, które zapewniają prymitywne typy danych, typy kompozycji aplikacji i podstawowe narzędzia.

Zestaw narzędzi SDK i kompilatorów językowych, które umożliwiają podstawową obsługę programistów, dostępnych w .NET Core SDK.

Host aplikacji „dotnet”, który służy do uruchamiania aplikacji .NET Core. Wybiera środowisko wykonawcze i hostuje środowisko uruchomieniowe, zapewnia zasady ładowania zestawu i uruchamia aplikację. Ten sam host służy również do uruchamiania narzędzi SDK w bardzo podobny sposób.

Zestaw
źródło
19

.NET Core to nowa wieloplatformowa implementacja standardów .NET (ECMA 335) podobna do Mono, ale wykonana przez samego Microsoft.

Zobacz docs.microsoft.com

farfareast
źródło
18

Microsoft uznał przyszły paradygmat open source sieci i zdecydował się otworzyć platformę .NET na inne systemy operacyjne. .NET Core to .NET Framework dla komputerów Mac i Linux. Jest to „lekki” .NET Framework, więc brakuje niektórych funkcji / bibliotek.

W systemie Windows nadal działałbym .NET Framework i Visual Studio 2015. .NET Core jest bardziej przyjazny ze światem open source, takim jak Node.js , npm, Yeoman , Docker itp.

Możesz tworzyć pełnoprawne strony internetowe i API RESTful na Macu lub Linuksie za pomocą Visual Studio Code + .NET Core, co wcześniej nie było możliwe. Więc jeśli kochasz Maca lub Ubuntu i jesteś programistą .NET, śmiało i skonfiguruj.

W przypadku Mono vs. .NET Core, Mono został opracowany jako .NET Framework dla systemu Linux, który jest teraz nabywany przez Microsoft (firma o nazwie Xamarin ) i wykorzystywany w programowaniu mobilnym. W końcu Microsoft może scalić / zmigrować Mono do .NET Core. Nie martwiłbym się teraz o Mono.

Manish Jain
źródło
12

Próbowałem dziś utworzyć nowy projekt w Visual Studio 2017 (ostatnio uaktualniony z Visual Studio 2015) i zauważyłem nowy zestaw opcji dla typu projektu. Albo są nowe, albo minęło trochę czasu, odkąd zacząłem nowy projekt !! :)

Zrzut ekranu programu Visual Studio

Natrafiłem na ten link do dokumentacji i uznałem go za bardzo przydatny, dlatego dzielę się. Szczegóły dotyczące pocisków podano również w artykule. Właśnie zamieszczam tutaj pociski:

Powinieneś używać .NET Core dla swojej aplikacji serwerowej, gdy:

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.

Powinieneś używać .NET Framework dla swojej aplikacji serwerowej, gdy:

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.

Ten link zawiera słownik terminów .NET.

joym8
źródło
11

Ze strony Microsoft :

.NET Core odnosi się do kilku technologii, w tym .NET Core, ASP.NET Core i Entity Framework Core.

Technologie te różnią się od natywnego .NET tym, że działają przy użyciu środowiska uruchomieniowego CoreCLR (używanego w Universal Windows Platform ).

Jak wspomniałeś w swoim pytaniu, .NET Core jest nie tylko open source, ale także przenośny [działa na MacOS, Windows i Linux]

Elementy wewnętrzne .NET Core są również zoptymalizowane pod kątem nieużywania różnych modułów z biblioteki podstawowej, chyba że jest to wymagane przez aplikację.

Salah Alshaal
źródło
4
„.NET Core odnosi się do kilku technologii, w tym .NET Core” ... świetne rzeczy
Kieren Johnstone
3

Microsoft właśnie ogłosił .NET Core v 3.0, który jest znacznie ulepszoną wersją .NET Core.

Aby uzyskać więcej informacji, odwiedź ten świetny artykuł: Różnica między .NET Framework a .NET Core od kwietnia 2019 r.

itsikha
źródło
3
Zdecydowanie odradza się odpowiedzi zawierające tylko linki i odpowiedzi oparte głównie na opiniach . Proszę zobaczyć meta.stackexchange.com/a/8259
podwójny sygnał
Rozumiem, zredagowałem część opinii. Dziękuję za informację.
itsikha
1
Ulepszony w jaki sposób? Czy możesz przedstawić streszczenie najważniejszych zmian i uzupełnień?
Peter Mortensen
3

.NET Core to darmowa i zarządzana platforma oprogramowania komputerowego typu open source dla systemów operacyjnych Windows, Linux i macOS. Jest to open source, wieloplatformowy następca .NET Framework.

Aplikacje .NET Core są obsługiwane w systemach Windows, Linux i macOS. W skrócie .NET Core jest podobny do .NET Framework, ale jest wieloplatformowy, tzn. Pozwala aplikacjom .NET działać w systemach Windows, Linux i MacOS. Aplikacje .NET Framework mogą działać tylko w systemie Windows. Podstawową różnicą między .NET Framework a .NET core jest to, że .NET Core jest wieloplatformowy, a .NET Framework działa tylko w systemie Windows.

Ponadto .NET Core ma wbudowane wstrzykiwanie zależności przez Microsoft i do wstrzykiwania zależności nie trzeba używać oprogramowania / bibliotek DLL innych firm.

Waleed Naveed
źródło
1
Czy możesz rozwinąć iniekcję zależności? Co to właściwie oznacza w tym kontekście? Czy masz na myśli konkretne ramy? Czy masz jakieś referencje / linki?
Peter Mortensen
1

.NET Core to otwarta. Wieloplatformowa wersja .NET. Produkty Microsoft, oprócz ich wielkich możliwości, zawsze były drogie dla zwykłych użytkowników, zwłaszcza użytkowników końcowych produktów stworzonych przez technologie .NET.

Większość klientów niskiego poziomu woli używać Linuksa jako swojego systemu operacyjnego, a wcześniej .NET Core nie chcieliby korzystać z technologii Microsoft, pomimo ich wielkich możliwości. Ale po produkcji .NET Core problem ten został całkowicie rozwiązany i możemy zadowolić naszych klientów bez względu na ich system operacyjny itp.

sajadre
źródło
To nie jest całkowicie rozwiązane. Trudno będzie ci używać Windows Forms lub aplikacji WPF w systemie Linux.
Peter Mortensen
0

.NET Core jest otwartą i wieloplatformową wersją .NET Framework.

JEuvin
źródło