Що таке ".NET Core"?


323

Нещодавно в офіційному .NET Framework Blog було оголошено, що .NET Core буде відкритим кодом .

Як не дивно, автор згадує, що те , що є .NET Core, буде пояснено в наступному дописі. Ще деякі деталі згадуються в іншому повідомленні .

З поданої діаграми:

.NET Core схема

і сам текст статей, я вважаю, що .NET Core (окрім очевидних речей, таких як відкриті джерела), є модульною повторною реалізацією повної .NET. Тобто компоненти фреймворку завантажуються в міру необхідності, так само, як зараз завантажуються пакети NuGet. І тепер ASP.NET 5 - це один з модулів, який вже реалізований. Чи правильно я розумію .NET Core? Можливо, мені чогось не вистачає?


Я знайшов нещодавню статтю, яку вважав короткою і дуже хорошою. Він охоплює .NET Standard, .NET Core та .NET Framework та їх зв’язок. Я дуже рекомендую його.


5
Тут є нова публікація про це blogs.msdn.com/b/dotnet/archive/2014/12/04/…, але все ще важко зрозуміти цю діаграму. Це означає, що WPF та WinForms не можуть використовувати .NET Core, наприклад?
dodgy_coder

@dodgy_coder Я думаю, що вони, зрештою, саме в тому, що Store Apps і ASP.NET 5 першими застосували нову архітектуру фреймворку.
Петро Абдулін

1
@dodgy_coder, Його право. На сьогоднішній день додатки WPF та WinForms не переносяться до ядра .net. Вони можуть бути перероблені у універсальні програми для Windows. Дивіться це: blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev

Відповіді:


154

З блогу .NET Оголошення .NET 2015 Попередній перегляд: Нова ера для .NET :

.NET Core має два основні компоненти. Він включає невеликий час виконання, який будується з тієї ж бази коду, що і .NET Framework CLR. Виконання .NET Core включає в себе той же GC та JIT (RyuJIT), але не включає такі функції, як Домени додатків або Захист доступу до коду. Час виконання доставляється через NuGet, як частина пакету [ASP.NET Core].

.NET Core також включає бібліотеки базового класу. Ці бібліотеки є значною мірою тим самим кодом, що і бібліотеки класів .NET Framework, але вони були враховані (усунення залежностей), щоб ми могли доставити менший набір бібліотек. Ці бібліотеки поставляються у вигляді системи. * Пакети NuGet на NuGet.org.

І:

[ASP.NET Core] є першим навантаженням, яке прийняло .NET Core. [ASP.NET Core] працює як .NET Framework, так і .NET Core. Ключовим значенням [ASP.NET Core] є те, що він може працювати на кількох версіях [.NET Core] на одній машині. Веб-сайт A і веб-сайт B можуть працювати на двох різних версіях .NET Core на одній машині або вони можуть використовувати одну і ту ж версію.

Коротше кажучи: спочатку з'явився Microsoft .NET Framework , який складається з режиму виконання, який виконує додаток і бібліотечний код, і майже повністю задокументованої бібліотеки стандартного класу .

Виконання - це загальна мова виконання , яка реалізує загальну мовну інфраструктуру , працює з компілятором JIT для запуску байтового коду CIL (раніше MSIL) .

Специфікація та реалізація .NET Microsoft., Враховуючи її історію та призначення, були дуже орієнтовані на Windows та IIS та "жирні". Існують варіанти з меншою кількістю бібліотек, просторів імен та типів , але мало хто з них був корисним для розробки Інтернету чи настільних ПК або важко переносити з юридичної точки зору .

Тож для забезпечення версії .NET, яка не є Microsoft, яка могла б працювати на машинах, що не є Windows, необхідно було розробити альтернативу. Для цього потрібно перенести не лише час виконання, але й всю бібліотеку Framework Class, щоб стати добре прийнятим. Крім того, щоб бути повністю незалежною від Microsoft, знадобиться компілятор для найбільш часто використовуваних мов.

Mono є однією з небагатьох, якщо не єдиною альтернативною реалізацією режиму виконання , який працює на різних ОС, крім Windows, майже всіх просторів імен з бібліотеки Framework Class, як .NET 4.5 та компілятора VB і C # .

Введіть .NET Core: реалізація з відкритим кодом для виконання та мінімальна бібліотека базового класу. Вся додаткова функціональність постачається через пакети NuGet, розгортаючи конкретні умови виконання, бібліотеки фреймворків та сторонні пакети із самим додатком.

ASP.NET Core - це нова версія MVC та WebAPI, поєднана з тонкою абстракцією сервера HTTP, яка працює на .NET Core, а також в .NET Framework.


4
О, ось як я це пропустив! Це було фактично нижче в часовій шкалі блогу! Така ганьба ..
Петро Абдулін

17
Це все досить нові речі і ледь описані, я думаю, ви задали гарне запитання. :)
CodeCaster

3
З другої думки здається, що це не «наступний пост», оскільки опис все ще досить короткий.
Петро Абдулін

2
Хіба це не те, що нам приносить vNext?
ps2goat

3
Ми робимо це з тих пір, як почали публікувати рамки через nuget. Не потрібно вирішувати цю посаду.
ps2goat

84

Це підмножина .NET Framework, розпочата з версії Compact Framework. Він прогресував у Silverlight, Windows Store та Windows Phone. Він був зосереджений на тому, щоб розгортання було невеликим, що підходить для швидкого завантаження та пристроїв з обмеженими можливостями зберігання. І легше розробитись на платформах, які не є Windows, і, безумовно, це було причиною того, що вона була обрана як відкрите джерело. "Складні" та "дорогі" частини CLR та бібліотеки базового класу опущені.

В іншому випадку це завжди легко розпізнати, коли ви націлюєтесь на таку версію рамки, оскільки багато смаколиків не вистачить. Ви будете використовувати окремий набір еталонних збірок, які розкривають лише те, що підтримується під час виконання. Він зберігається на вашій машині в C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCoreкаталозі.


Оновлення: після випуску .NET Core 2.0 я побачив деякі представницькі номери, що дає гідне розуміння. Протягом останніх двох років вони наполегливо працювали над переносом рамкових API в .NET Core. .NET Core 1.0 спочатку підтримував 13000 API. .NET Core 2.0 додав 20 000 API, що збільшило їх до 32 000 і дозволило перенести близько 70% існуючих пакетів NuGet. Існує набір API, які занадто сильно пов'язані з Windows, щоб їх було легко переносити на Linux та MacOS. Охоплений нещодавно випущеним пакетом сумісності Windows, він додає ще 20000 API.


4
З публікації в блозі я б не сказав, як це виглядає ще одна "компактна" рамкова версія. Оголошено .NET Coreверсію 5.0, яка перевищує останню повну рамку. Я припускаю, що вони означають, що це щось інше.
Петро Абдулін

5
Я щойно описав історію версії .NETCore. Нічого нового під сонцем, воно існувало вже давно. Зміни 5.0 поступові, новий тремтіння RyuJIT x64 - єдиний, про який я зараз можу подумати. Тільки зміна ліцензії справді нова :)
Ганс Пасант

3
Я зрозумів вашу думку. Хоча я все ще вважаю, що анонс фреймворку як наступної епохи .NET трохи сміливий.
Петро Абдулін

50

Я знайшов нещодавню статтю, яку вважав короткою і дуже хорошою. Він охоплює .NET Standard, .NET Core та .NET Framework та їх зв’язок. Я дуже рекомендую його. На жаль, у мене немає часу на адаптацію та розміщення тут.

Оригінальний вміст відповіді нижче:


Отже, виходячи з останнього офіційного запису з цього приводу, ось декілька ключових моментів, як я їх бачу:

.NET Core, по суті, є вилкою .NET Framework, реалізація якої також оптимізована навколо проблем факторингу.

Ми вважаємо, що .NET Core не є специфічним ні для .NET Native, ні для ASP.NET 5 - BCL та умови виконання мають загальне призначення і розроблені як модульні. Таким чином, він є основою для всіх майбутніх .NET вертикалей.

Таким чином.

Введіть тут опис зображення

Бачте, їм навіть потрібні окремі низькі рівні, але основна частина BCL все ще поширена:

Ми вважаємо, що .NET Core не є специфічним ні для .NET Native, ні для ASP.NET 5 - BCL та умови виконання мають загальне призначення і розроблені як модульні. Таким чином, він є основою для всіх майбутніх .NET вертикалей.

Тобто, пурпурові прямокутники зверху масово додаватимуться новими моделями додатків, але база залишиться загальною.

Розгортання NuGet:

На відміну від .NET Framework, платформа .NET Core буде поставлятися як набір пакетів NuGet. Ми зупинилися на NuGet, тому що саме там вже є більшість екосистеми бібліотеки.

Зв'язок із поточними рамками:

Для Visual Studio 2015 наша мета - переконатися, що .NET Core є чистою підмножиною .NET Framework. Іншими словами, не було б жодних прогалин у функції. Після випуску Visual Studio 2015 ми очікуємо, що .NET Core буде версія швидше, ніж .NET Framework. Це означає, що з’являться моменти часу, коли функція буде доступна лише на платформах .NET Core.

Підсумок:

Платформа .NET Core - це новий стек .NET, оптимізований для розробки з відкритим кодом та швидкої доставки на NuGet. Ми працюємо з спільнотою Mono, щоб зробити її чудовою для Windows, Linux та Mac, а Microsoft підтримуватиме її на всіх трьох платформах.

Ми зберігаємо значення, які .NET Framework приносить для розвитку корпоративного класу. Ми пропонуємо дистрибутиви .NET Core, що представляють собою набір пакетів NuGet, які ми протестували та підтримуємо разом. Visual Studio залишається вашим єдиним центром розвитку. Споживання пакетів NuGet, які є частиною дистрибуції, не потребує підключення до Інтернету.

В основному це можна розглядати як .NET 4.6 зі зміненою моделлю розповсюдження, яка одночасно перебуває у процесі перетворення у відкритий код.


22

Поточна документація добре пояснює, що таке .NET Core, сфери, які слід використовувати тощо. Наступні характеристики найкраще визначають .NET Core:

Гнучка розгортання : може бути включена у ваш додаток або встановлена ​​поруч із користувачем або на машині.

Крос-платформа : працює на Windows, macOS та Linux; можна перенести на інші ОС. Підтримувані операційні системи (ОС), процесори та сценарії прикладних програм з часом будуть зростати, що надається Microsoft, іншими компаніями та особами.

Інструменти командного рядка : Усі сценарії продуктів можна використовувати в командному рядку.

Сумісний : .NET Core сумісний з .NET Framework, Xamarin та Mono через стандартну бібліотеку .NET.

Відкритий код : платформа .NET Core є відкритим кодом, використовуючи ліцензії MIT та Apache 2. Документація ліцензується під CC-BY. .NET Core - це проект .NET Foundation.

Підтримується Microsoft : .NET Core підтримується Microsoft, за підтримкою .NET Core

І ось що включає .NET Core:

Виконання .NET, що забезпечує систему типів, завантаження складання, сміттєзбірник, нативну сумісність та інші основні послуги.

Набір бібліотек фреймворків, які надають примітивні типи даних, типи композиції додатків та основні утиліти.

Набір інструментів SDK та компіляторів мови, які дозволяють базовий досвід розробника, доступний у .NET Core SDK.

Хост додатків 'dotnet', який використовується для запуску програм .NET Core. Він вибирає час виконання та розміщує час виконання, забезпечує політику завантаження збірки та запускає додаток. Той самий хост також використовується для запуску інструментів SDK майже однаково.



18

Microsoft визнала майбутню веб-парадигму з відкритим кодом та вирішила відкрити .NET для інших операційних систем. .NET Core - це .NET Framework для Mac та Linux. Це "легкий" .NET Framework, тому деякі функції / бібліотеки відсутні.

У Windows я б все-таки працював .NET Framework та Visual Studio 2015.. NET Core більш дружній із світом відкритого коду, як Node.js , npm, Yeoman , Docker тощо.

Ви можете розробити повноцінні веб-сайти та API RESTful на Mac або Linux за допомогою Visual Studio Code + .NET Core, що раніше не було можливим. Тож якщо ви любите Mac чи Ubuntu, а ви розробник .NET, тоді продовжуйте їх і налаштовуйте.

Для Mono vs. .NET Core Mono був розроблений як .NET Framework для Linux, який зараз придбав Microsoft (компанія називається Xamarin ) і використовується в мобільній розробці. Врешті-решт, Microsoft може об'єднати / перенести Mono в .NET Core. Я б не хвилювався про Моно прямо зараз.


12

Я намагався створити новий проект у Visual Studio 2017 сьогодні (нещодавно оновлений від Visual Studio 2015) і помітив новий набір варіантів для типу проекту. Або вони нові, або минув час, коли я розпочав новий проект !! :)

Знімок екрану візуальної студії

Я наткнувся на це посилання на документацію і вважаю це дуже корисним, тому я ділюсь. Деталі про кулі також наведені у статті. Я просто розміщую кулі тут:

Ви повинні використовувати .NET Core для свого серверного додатка, коли:

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.

Ви повинні використовувати .NET Framework для свого серверного додатка, коли:

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.

Це посилання надає глосарій термінів .NET.


11

З веб-сайту Microsoft :

.NET Core відноситься до декількох технологій, включаючи .NET Core, ASP.NET Core та Entity Framework Core.

Ці технології відрізняються від рідних .NET тим, що вони працюють за допомогою режиму виконання CoreCLR (використовується на універсальній платформі Windows ).

Як ви вже згадували у своєму запитанні, .NET Core є не тільки відкритим кодом, але і портативним [працює на MacOS, Windows та Linux]

Внутрішня .NET Core також оптимізована для використання різних модулів з її основної бібліотеки, якщо цього не вимагає додаток.


4
".NET Core стосується декількох технологій, включаючи .NET Core" ... чудові речі
Кірен Джонстон

3

Microsoft щойно оголосила .NET Core v 3.0, що є значно вдосконаленою версією .NET Core.

Для отримання більш детальної інформації відвідайте цю чудову статтю: Різниця між .NET Framework та .NET Core від квітня 2019 року.


3
Відповіді лише на посилання та в першу чергу відповіді, що базуються на думці, сильно не рекомендуються . Дивіться сторінку meta.stackexchange.com/a/8259
подвійний звуковий сигнал

Зрозумів, я відредагував думку думки .. дякую, що дав мені знати.
іциха

1
Удосконалено яким чином? Чи можете ви надати резюме того, що, на вашу думку, є найважливішими змінами та доповненнями?
Пітер Мортенсен

3

.NET Core - це вільна та з відкритим кодом, керована рамка комп'ютерного програмного забезпечення для операційних систем Windows, Linux та macOS. Це відкритий джерело, перехідник між платформами .NET Framework.

Програми .NET Core підтримуються в Windows, Linux та macOS. У двох словах .NET Core схожий на .NET Framework, але він є кросплатформенним, тобто дозволяє програмам .NET запускатись у Windows, Linux та MacOS. Програми .NET Framework можуть працювати лише в системі Windows. Отже, основна відмінність .NET Framework від .NET core полягає в тому, що .NET Core є кросплатформою, а .NET Framework працює лише в Windows.

Крім того, .NET Core має вбудовану ін'єкцію залежності від Microsoft, і вам не потрібно використовувати сторонні програмні / DLL-файли для введення залежності.


1
Чи можете ви детальніше розглянути питання про введення залежності? Що це насправді означає в цьому контексті? Ви маєте на увазі конкретні рамки? У вас є посилання / посилання?
Пітер Мортенсен

1

.NET Core - це версія з відкритим кодом та кросплатформна версія .NET. Продукти Microsoft, окрім чудових здібностей, які вони мають, завжди були дорогими для звичайних користувачів, особливо для кінцевих споживачів продуктів, виготовлених технологіями .NET.

Більшість клієнтів низького рівня воліють використовувати Linux як свою ОС, а раніше .NET Core вони не хотіли б використовувати технології Microsoft, незважаючи на великі здібності. Але після виробництва .NET Core ця проблема вирішується повністю, і ми можемо задовольнити своїх клієнтів, не враховуючи їх ОС тощо.


Це не вирішено повністю. Вам буде важко використовувати додаток Windows Forms або WPF в Linux.
Пітер Мортенсен

0

.NET Core - це версія з відкритим кодом та крос-платформи .NET Framework.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.