Что такое «.NET Core»?

323

Недавно в официальном блоге .NET Framework было объявлено, что .NET Core выходит с открытым исходным кодом .

Как ни странно, автор упоминает, что то , что является .NET Core, будет объяснено в следующем посте. Некоторые подробности упоминаются в другом сообщении .

Из прилагаемой схемы:

Диаграмма ядра .NET

и сам текст статьи, я бы предположил, что .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 Preview: новая эра для .NET :

.NET Core состоит из двух основных компонентов. Он включает в себя небольшую среду выполнения, которая построена из той же кодовой базы, что и .NET Framework CLR. Среда выполнения .NET Core включает в себя те же GC и JIT (RyuJIT), но не включает такие функции, как домены приложений или безопасность доступа к коду. Среда выполнения поставляется через NuGet как часть пакета [ASP.NET Core].

.NET Core также включает библиотеки базовых классов. Эти библиотеки в основном представляют собой тот же код, что и библиотеки классов .NET Framework, но были учтены (устранение зависимостей), чтобы мы могли поставлять меньший набор библиотек. Эти библиотеки поставляются в виде пакетов System. * 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 , которая состоит из среды выполнения, выполняющей код приложения и библиотеки, и почти полностью документированной стандартной библиотеки классов .

Среда выполнения - Common Language Runtime , которая реализует инфраструктуру Common Language , работает с компилятором JIT для запуска байт-кода CIL (ранее MSIL) .

Спецификация и реализация Microsoft .NET были, учитывая ее историю и назначение, очень ориентированы на Windows и IIS и были "толстыми". Существуют варианты с меньшим количеством библиотек, пространств имен и типов , но немногие из них были полезны для веб-разработки или разработки настольных компьютеров или затрудняют перенос с юридической точки зрения .

Таким образом, чтобы предоставить версию .NET не от Microsoft, которая могла бы работать на компьютерах, отличных от Windows, необходимо было разработать альтернативу. Для этого нужно перенести не только среду выполнения, но и всю библиотеку классов Framework. Кроме того, для полной независимости от Microsoft потребуется компилятор для наиболее часто используемых языков.

Mono является одной из немногих, если не единственной альтернативной реализацией среды выполнения , которая работает в различных ОС, кроме Windows, почти во всех пространствах имен из библиотеки классов Framework начиная с .NET 4.5 и компилятора VB и C # .

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

ASP.NET Core - это новая версия MVC и WebAPI, объединенная с тонкой абстракцией HTTP-сервера, которая работает в среде выполнения .NET Core, а также в .NET Framework.

CodeCaster
источник
4
О, вот как я это пропустил! Это было на самом деле ниже на временной шкале блога! Такой позор ..
Петр Абдулин
17
Это все довольно новое и едва описанное, я думаю, вы задали хороший вопрос. :)
CodeCaster
3
Со второй мысли кажется, что это не «следующий пост», так как описание все еще довольно краткое.
Петр Абдулин
2
Разве это не то, что принес нам vNext?
ps2goat
3
Мы занимаемся этим с тех пор, как они начали публиковать фреймворк через nuget. Нет необходимости в обходе этого поста.
ps2goat
84

Это подмножество .NET Framework, начиная с версии Compact Framework. Это прогрессировало в Silverlight, Магазин Windows и Windows Phone. Он был сосредоточен на том, чтобы развертывание было небольшим, подходящим для быстрой загрузки и устройств с ограниченными возможностями хранения. И это легче поднять на не-Windows платформах, и, конечно, это было причиной, по которой он был выбран в качестве открытого источника. «Сложные» и «дорогие» части CLR и библиотеки базовых классов опущены.

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


Обновление: после выпуска .NET Core 2.0 я видел некоторые репрезентативные цифры, которые дают хорошее представление. Последние два года они усердно работали над переносом API-интерфейсов инфраструктуры на .NET Core. Изначально .NET Core 1.0 поддерживал 13 000 API. .NET Core 2.0 добавил 20 000 API, доведя общее количество до 32 000 и позволив перенести около 70% существующих пакетов NuGet. Существует ряд API-интерфейсов, которые слишком тесно связаны с Windows, чтобы их было легко переносить на Linux и MacOS. Покрытый недавно выпущенным пакетом совместимости Windows, он добавляет еще 20 000 API.

Ганс Пассант
источник
4
Из сообщения в блоге я бы не сказал, как это выглядит в другой «компактной» версии фреймворка. Объявлена .NET Coreверсия 5.0, которая выше, чем последняя полная версия. Я предполагаю, что они имеют в виду что-то другое.
Петр Абдулин
5
Я только что описал историю версии .NETCore. Ничего нового под солнцем, это было вокруг в течение долгого времени. Изменения в 5.0 пошаговые, новый RyuJIT x64 jitter - единственный, о котором я могу думать прямо сейчас. Только изменение лицензии действительно новое :)
Hans Passant
3
Японял твою точку зрения. Хотя я все еще думаю, что объявление подмножества фреймворка как следующей эры .NET немного смело.
Петр Абдулин
50

Я нашел недавнюю статью, которая показалась мне короткой и очень хорошей. Он охватывает .NET Standard, .NET Core и .NET Framework и их взаимосвязь. Я очень рекомендую это. К сожалению, у меня нет времени, чтобы приспособиться и поставить его здесь.

Оригинальное содержание ответа ниже:


Итак, основываясь на последней официальной записи на эту тему, вот некоторые ключевые моменты, которые я вижу:

.NET Core - это, по сути, форк .NET Framework, реализация которого также оптимизирована с учетом факторинга.

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

Так что .NET Native и ASP.NET 5 - это просто «субъекты» тестирования для новой конфигурации фреймворка, отчасти это может быть потому, что они совершенно разные:

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

Видите, им даже нужен отдельный низкоуровневый уровень, но основная часть 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 практически таким же образом.

Устанавливать
источник
19

.NET Core - это новая кроссплатформенная реализация стандартов .NET (ECMA 335), аналогичная Mono, но разработанная самой Microsoft.

Смотрите docs.microsoft.com

farfareast
источник
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 против .NET Core Mono был разработан как .NET Framework для Linux, который теперь приобретен Microsoft (компания под названием Xamarin ) и используется для разработки мобильных приложений. В конце концов, Microsoft может объединить / перенести Mono в .NET Core. Я бы не стал беспокоиться о Моно прямо сейчас.

Маниш джайн
источник
12

Сегодня я пытался создать новый проект в Visual Studio 2017 (недавно обновленный с Visual Studio 2015) и заметил новый набор вариантов для типа проекта. Либо они новые, либо прошло уже много времени с тех пор, как я начал новый проект !! :)

Скриншот Visual Studio

Я наткнулся на эту ссылку документации и нашел ее очень полезной, поэтому я делюсь. Подробности пули также приведены в статье. Я просто размещаю здесь пули:

Вы должны использовать .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.

joym8
источник
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 года.

itsikha
источник
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 эта проблема полностью решена, и мы можем удовлетворить наших клиентов, не учитывая их ОС и т. Д.

sajadre
источник
Это не решено полностью. Вам будет трудно использовать приложение Windows Forms или WPF в Linux.
Питер Мортенсен
0

.NET Core - это кроссплатформенная версия .NET Framework с открытым исходным кодом.

JEuvin
источник