Я потерялся. Что случилось с ASP.NET MVC 5?




asp.net-mvc .net-core (2)

( Этот ответ регулярно обновляется всякий раз, когда делается новое объявление .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 APIASP.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 нетривиально, хотя их базовая архитектура контроллеров и промежуточного программного обеспечения одинакова.
  • .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 .

Я отмечаю, что «Ядро» - это горячая маркировка 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.

Временная шкала и блок-схема

(Я увлекся, делая это ...)

Я не спешил работать над различными проектами, и, видимо, Microsoft была занята внесением каких-то больших изменений, и это чертовски смущает меня. ASP.NET Core впервые появился у меня на радаре, когда я установил Visual Studio 2017 в прошлом году, и приступил к созданию нового проекта, и неожиданно появился выбор .NET Framework, .NET Standard и .NET Core. Поэтому я немного изучил их и увидел, что последние два, в некотором роде, являются сокращенными версиями полного фреймворка. Я прочитал эту статью Скотта Хансельмана. ASP.NET 5 мертв - Представляя ASP.NET Core 1.0 и .NET Core 1.0, я также нашел это, что отвлекло меня от ASP.NET Core: выбор между ASP.NET и ASP.NET Core , Мой вывод был следующим: «Ядро новое, вы можете продолжать использовать полный фреймворк». Поэтому я создал новый сайт ASP.NET MVC с использованием .NET Framework 4.6.2 и Microsoft.AspNet.Mvc 5.2.3.

С момента создания этого проекта я обнаружил некоторые ошибки в MVC и Entity Framework, но обнаружил, что единственное упоминание о них в Интернете, по-видимому, в Core, и это единственное место, где они рассматриваются как исправленные.

Сейчас, сегодня, я пытаюсь найти документацию по System.Web.Mvc.Controller и System.Web.Mvc.JsonResult, и она исчезла, кроме как по документации Core. Я наконец выкопал это here где это говорит, что это больше не поддерживается?

Я так много понял о Core и сказал: «Хорошо, почему мне все равно? Я собираюсь продолжать делать то, что я делаю, и проверю это, когда это будет сделано». Но сейчас кажется, что 4.6.2 даже больше не поддерживается. Может кто-нибудь объяснить, что происходит? Мой проект NET 4.6.2 / MVC 5.2.3 теперь устарел еще до того, как я его написал? Если нет, то почему документация была удалена и скрыта? Я беспокоюсь, что некоторые из моих зависимостей могут быть недоступны или не совместимы с Core.


В этом ответе мы попытаемся сосредоточиться только на ASP.NET MVC 5 и как можно меньшем объеме ASP.NET Core.

Жизненный цикл продукта

Microsoft все еще поддерживает это, и еще не объявлено о конце срока службы,

https://www.asp.net/support

Рамки / Выход продукта на пенсию

ASP.NET MVC 4 1 июля 2019 г.

ASP.NET MVC 5

Так что, если хотите, продолжайте использовать его. Помните, что пользователи VB6 и классические ASP по-прежнему поддерживаются Microsoft.

.NET Framework 4.5.2 и выше все еще поддерживаются, если вы проверяете документацию Microsoft по жизненному циклу продукта.

техническое обслуживание

Тем не менее, вы должны заметить, что ASP.NET MVC 5 находится в режиме обслуживания, так как ресурсы разработки почти все находятся на ASP.NET Core прямо сейчас.

Вы получаете,

  • Непредсказуемые релизы патчей от NuGet.org.

Если вы отслеживаете соответствующие пакеты NuGet, вы должны заметить, что даже недавно Microsoft обновляет их, чтобы устранить уязвимости безопасности и так далее.

  • Заблокированная документация.

В уведомлении, которое вы видели из Microsoft Docs, фактически подчеркивается самое первое предложение: «Мы больше не обновляем этот контент регулярно». Это имеет смысл, так как ASP.NET MVC 5 очень прочный, поэтому не стоит ожидать, что новые материалы будут добавлены.

  • Очень ограниченные исправления ошибок и новые функции.

Вы сказали: «С момента создания этого проекта я обнаружил некоторые ошибки в MVC и Entity Framework, но обнаружил, что единственное упоминание о них в Интернете, по-видимому, в Core, и это единственное место, где их считают исправленными «.

Ну, это действительно зависит от того, о каких "ошибках" вы говорите. Как я уже говорил ранее, проблемы, связанные с безопасностью, все еще исправляются, но ошибки с обходными путями или функциональными ограничениями с меньшей вероятностью будут исправлены. Это проект с открытым исходным кодом, поэтому, если вы действительно хотите, вы можете решить проблемы самостоятельно, в крайнем случае.

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

миграция

Рассмотрите возможность перехода на ASP.NET Core, если можете.





asp.net-core-mvc