Ответ 1
(Этот ответ регулярно обновляется всякий раз, когда делается новое объявление .NET, и он обновлялся с подробностями о ASP.NET Core 3.0,.NET 3 и .NET 5)
За последние 3 года Microsoft нуждается в хорошей суматохе по сравнению с .NET Core/DNX, ASP.NET Core,.NET Standard,.NET 5 и остальными.
(и я говорю это как бывший FTE SE в DevDiv... ("Привет из здания 16!"))
- ASP.NET или System.Web теперь не работает. Веб-формы мертвы (ура!)
- ASP.NET MVC, запущенный в 2008 году, был построен поверх ASP.NET, но обошел большую часть инфраструктуры WebForms.
- ASP.NET MVC имеет свои собственные версии, отличные от ASP.NET и ASP.NET Web API (и ASP.NET Core). Вы связались с документацией ASP.NET MVC 5 - это не то же самое, что ASP.NET 5.
- ASP.NET Web API, запущенный в 2012 году, является родственным ASP.NET MVC, поскольку он также построен на основе ASP.NET, но имеет свою собственную библиотеку классов (
System.Web.Http
), которая почти не используется совместно с ASP.NET MVC (System.Web.Mvc
). Попытка объединить службу веб-API ASP.NET с веб-приложением ASP.NET MVC в одном и том же проекте - трудная задача. - ASP.NET MVC 5 был запущен в 2014 году в качестве обновления ASP.NET MVC 4. Это не связано с ASP.NET 5.
- ASP.NET MVC 6 никогда не был выпущен. Он был свернут в ASP.NET 5, который затем стал ASP.NET Core. Его целью было объединение ASP.NET MVC и ASP.NET Web API в единую платформу.
- ASP.NET Core был запущен в 2016 году как улучшенный дизайн ASP.NET MVC 5, но без зависимостей от
System.Web.dll
или каких-либо (ныне устаревших) зависимостей IIS (например, старый конвейер запросов,IHttpHandler
иIHttpModule
больше не существует).- Обратите внимание, что корневым пространством имен библиотеки классов ASP.NET Core теперь является
Microsoft.AspNet
а неSystem.Web
. Это было источником путаницы для меня. Это означает, что обновление проектов с ASP.NET MVC и ASP.NET WebAPI до ASP.NET Core нетривиально, хотя их базовая архитектура контроллеров и промежуточного программного обеспечения одинакова.
- Обратите внимание, что корневым пространством имен библиотеки классов ASP.NET Core теперь является
- .NET Core - это новая версия CLR и BCL, которая является явно переносимой и работает в Windows, Linux и macOS.
- Библиотеки базовых классов .NET Core 1.0 и .NET Core 2.0 считались анемичными по сравнению с полнофункциональной .NET Framework, которая является эксклюзивной для Windows.
- С .NET Core 3.0 и открытым исходным кодом WinForms, WPF и других компонентов .NET Framework,.NET Core теперь готовится как замена .NET Framework в Windows для разработки новых приложений.
- .NET 5 будет новым именем .NET Core после выпуска .NET Core 3 (.NET 5 ожидается в конце 2020 года).
- .NET 5 не имеет абсолютно никакого отношения ни к ASP.NET 5.0, ни к ASP.NET MVC 5.
- Не существует ни .NET Core 4, ни .NET Framework 5.0.
Я отмечаю, что "Core" - это горячая маркировка Microsoft для текущего поколения платформ .NET, которые работают с .NET Core (то есть они не имеют зависимостей Windows и, следовательно, являются переносимыми). (Точно так же, как Microsoft прикрепляла "Active" к вещам в 1990-х, если они использовали COM или ActiveX, например, Active Desktop, Active Channels, ActiMates, Active Directory, ActiveSync и т.д.). - Кроме того, Entity Framework Core по-прежнему не хватает многих функциональных возможностей Entity Framework 6, в основном потому, что он переписан, но со временем он достигнет паритета.
Поскольку в настоящее время доступно много сред выполнения .NET и BCL (.NET Framework,.NET Core, UWP, Xamarin (который использует Mono), Unity и другие), Microsoft представила .NET Standard, который по сути является перезагрузкой концепции Portable Class Library: где проекты Visual Studio предназначены для известного подмножества общих функций вместо конкретной реализации. (Я просто хотел бы, чтобы они начинали с нумерации версий с 4, чтобы соответствовать .NET Framework вместо того, чтобы начинать с 1.0
потому что это заставило меня снова задуматься о 2001 году.) - но важная часть - это ASP.NET Core 1 и ASP.NET Core 2 предназначен для .NET Standard вместо .NET Core - это означает, что ASP.NET Core работает поверх .NET Framework в Windows в дополнение к работе поверх .NET Core.
Я отмечаю, что все предыдущие методы кроссплатформенной совместимости .NET теперь устарели (включая нацеливание на подмножества Compact Framework, переносимые библиотеки классов и даже "общие проекты" в Visual Studio), так как они предназначались для других выпусков .NET, которые не больше существуют, такие как .NET Compact Framework, XNA, Silverlight и подмножество Windows Phone 7.
В мае 2019 года Microsoft анонсировала ".NET 5". Короче говоря, .NET Framework заменяется .NET Core (в частности: следующая версия .NET Core после .NET Core 3.0 будет называться .NET 5). Это объявление вообще не касается ASP.NET Core, за исключением того факта, что .NET 5 будет полностью поддерживать приложения ASP.NET Core 3.0, работающие на нем. (ASP.NET Core 4, вероятно, будет выпущен к тому времени)
В итоге:
- ASP.NET MVC 5 был недолгим преемником ASP.NET MVC 4, выпущенной вместе с ASP.NET Web API 2. На самом деле он работал поверх ASP.NET 4 (т.е. версия .NET 4.x
System.Web.dll
). Платформа ASP.NET MVC теперь устарела. - ASP.NET 5 был EOL'd и переименован в ASP.NET Core и включает в себя функциональность встроенного ASP.NET MVC 5.
- ASP.NET Core 1 и ASP.NET Core 2 могут работать либо на .NET Core (кроссплатформенный), либо на .NET Framework (Windows), поскольку он нацелен на .NET Standard.
- ASP.NET Core 3 теперь работает только на .NET Core 3.0.
Все они (в хронологическом порядке):
- ASP.NET 1 - 2001. Включенные веб-формы. Работал на .NET Framework 1.0 и 1.1.
System.Web.dll
. - ASP.NET 2.0 - 2005. Включенные веб-формы. Работал на .NET Framework 2.0.
System.Web.dll
. - ASP.NET MVC 1 и ASP.NET MVC 2 - 2008-2009. Запустил поверх ASP.NET 2.0.
System.Web.Mvc.dll
. - ASP.NET 4.0 - 2010. Включенные веб-формы. Работал на .NET Framework 4.0. Не было ASP.NET 3.0.
System.Web.dll
. - ASP.NET MVC 3 и ASP.NET MVC 4 - 2010-2013. Запустил поверх ASP.NET 4.0.
System.Web.Mvc.dll
. - ASP.NET Web Api 1 - 2012. Работал поверх ASP.NET 4.0.
System.Web.Http.dll
. - ASP.NET MVC 5 - 2013. Еще одно обновление ASP.NET MVC. Работал поверх ASP.NET 4.0, но также мог работать независимо без
System.Web.dll
под OWIN. - ASP.NET Web API 2 - 2013. Одноуровневая версия ASP.NET MVC 5. Может также работать без ASP.NET 4.0 под OWIN.
- ASP.NET MVC 6 - 2014-2015. Прерывается после достижения статуса Release Candidate и перезагружается как ASP.NET Core MVC 1.0 в 2016 году, который является компонентом MVC и Web API ASP.NET Core 1.
- ASP.NET 5 - 2014. Основная перезагрузка ASP.NET описана здесь. Основные изменения включали слияние MVC, веб-страниц и веб-API - и удаление веб- форм. ASP.NET 5 достиг статуса кандидата на выпуск, но затем был переименован в ASP.NET Core. Там никогда не было ASP.NET 6.
- ASP.NET Core 1 - 2016. Работает на .NET Framework 4.5 или .NET Core 1.0.
- .NET Core - 2016. Переносимая и минимальная среда выполнения .NET и библиотека классов.
- .NET Standard - 2017. Способ для программ нацеливаться на общий набор функций, который будет присутствовать во всех реализациях .NET(.NET Framework 4.5 и более поздние версии,.NET Core 2.0 и более поздние версии, Xamarin и т.д.).
- ASP.NET Core 2 - 2017-2018: где мы находимся сегодня. Работает на .NET Framework 4.6.1 или .NET Core 2.0. (По состоянию на конец 2018 года теперь есть ASP.NET Core 2.1).
- ASP.NET Core 3 - В конце октября 2018 года Microsoft объявила, что ASP.NET Core 3.0 теперь будет работать только на готовящемся .NET Core 3.0 (поэтому он больше не будет работать на .NET Framework 4.7.x). Это спорный шаг, потому что это означает, что теперь нет пути обновления с ASP.NET Core 2.x до ASP.NET Core 3.x для приложений, работающих на .NET Framework 4.7.x из-за зависимостей, которые не поддерживают .NET Core пока что, что означает, что скорее всего не будет .NET Standard 3.0.
- ASP.NET Core 3.0 в .NET 5 - В объявлении о выпуске .NET 5 в мае 2019 года Microsoft заявила, что приложения ASP.NET Core 3.0 будут работать в .NET 5. В настоящее время неясно, будут ли приложения ASP.NET Core 2.x иметь возможность работать без изменений в .NET 5.
Временная шкала и блок-схема
(Я увлекся, делая это...)