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

Я держал голову над работой над различными проектами, и, судя по всему, Microsoft занялась внесением больших изменений, и это меня сбило с толку. ASP.NET Core впервые появился на моем радаре, когда я установил Visual Studio 2017 в прошлом году и пошел, чтобы создать новый проект, и вдруг появился выбор.NET Framework,.NET Standard и.NET Core. Поэтому я немного посмотрел на них и увидел, что последние два являются, в некотором роде, сокращенными версиями полной структуры. Я прочитал этот пост Scott Hanselman. ASP.NET 5 мертв. Представляя ASP.NET Core 1.0 и.NET Core 1.0, я также нашел это, что оттолкнуло меня от ядра ASP.NET: выберите между ASP.NET и ASP.NET Core, Мой взнос был "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 и сказал: "Хорошо, почему мне все равно? Я буду продолжать делать то, что я делаю, и проверить это, когда это будет сделано". Но теперь кажется, что 4.6.2 больше не поддерживается. Может кто-нибудь объяснить, что происходит? Является ли мой проект NET 4.6.2/MVC 5.2.3 устаревшим до того, как я даже закончил его писать? Если нет, то почему документация удалена и скрыта? Я беспокоюсь, что некоторые из моих зависимостей могут быть недоступны или совместимы с Core.

Ответ 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 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.

Я отмечаю, что "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.

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

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

Diagram with a timeline of ASP.NET and a block diagram showing how the components of .NET Framework, ASP.NET and ASP.NET MVC come together

Ответ 2

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