我迷路了。 ASP.NET MVC 5怎么了?

我一直低着头做各种各样的项目,显然微软一直在忙于做一些大的改变,这让我很困惑。NET Core 第一次出现在我的视野中是在去年安装 Visual Studio 2017时,当时我正在创建一个新项目,突然有了。NET 架构,。NET 标准,以及。NET 核心。所以我对它们进行了一些研究,发现后两个在某种程度上是完整框架的缩写版本。我读了 Scott Hanselman 的这篇文章,我也发现了这个,它让我远离了 ASP.NET Core: 在 ASP.NET 和 ASP.NET 内核之间进行选择。我的总结是“核心是新的,您可以继续使用完整的框架。”所以我创建了一个新的 ASP.NET MVC 站点。NET Framework 4.6.2和 Microsoft。AspNet.MVC5.2.3.

自从创建了这个项目,我在 MVC 和实体框架中发现了一些看起来像是 bug 的东西,结果却发现网络上唯一提到它们的地方似乎是 Core,而这也是唯一被认为可以修复的地方。

现在,今天,我试图查找 System 上的文档。韦伯。MVC.控制器及系统。韦伯。MVC.除了核心文档之外,JsonResult 和它都消失了。我终于把它挖出来了 给你上面说它不再被维护了?

我理解 this much对 Core 的看法,我说: “好吧,我为什么要在乎?我会继续做我现在正在做的事情,并在完成之后再回来看看。”但是现在看起来4.6.2已经不再被支持了。有人能解释一下这是怎么回事吗?我的 NET 4.6.2/MVC 5.2.3项目在我写完之前就已经过时了吗?如果没有,为什么这些文件被退役和藏起来了?我担心我的一些依赖项甚至不能用于 Core 或与 Core 兼容。

58793 次浏览

(每当出现新的。NET 公告,并且已经使用 ASP.NET Core 3.0的详细信息进行了更新。NET 3,以及。NET 5)

微软需要一个很好的耳光,因为在过去的 三年5年里混乱的数量。NET 核心/DNX,ASP.NET 核心,。NET 标准。NET 5和其他的。

(and I'm saying that as a former FTE SE in DevDiv... ("hi from building 16!"))

  • ASP.NET aka "System.Web" is now dead. WebForms is dead (hurrah!)
  • 2008年发布的 ASP.NET MVC 是构建在 ASP.NET 之上的,但绕过了大多数 WebForms 基础设施。
    • NET MVC 有自己独立于 ASP.NETNET Web API(以及 ASP.NET 核心)的版本。
  • 2012年发布的 ASP.NET Web API ASP.NET MVC的兄弟,因为它也构建在 ASP.NET之上,但是它有自己的类库(System.Web.Http) ,与 ASP.NET MVC(System.Web.Mvc)没有太多共享。在同一个项目中尝试将 ASP.NET Web API 服务与 ASP.NET MVC Web 应用程序结合起来是一个痛苦的过程。
  • NET MVC 5 于2014年推出,作为对 ASP.NET MVC 4的更新,与 ASP.NET 5无关。
  • ASP.NET MVC 6 was never released. It was rolled-into ASP.NET 5 which then became ASP.NET 核心. Its goal was to combine ASP.NET MVC and ASP.NET Web API into a single platform.
  • ASP.NET Core was launched in 2016 as an improved design of ASP.NET MVC 5 but without the dependencies on System.Web.dll or any (now-legacy) IIS dependencies (e.g. the old request pipeline, IHttpHandler and IHttpModule no longer exist).
    • 请注意,ASP.NET Core的类库的根命名空间现在是 Microsoft.AspNet,而不是 System.Web。这让我很困惑。这意味着将项目从 ASP.NET MVCNET WebAPI升级到 ASP.NET 核心是非常重要的,尽管它们的控制器和中间件的基本架构是相同的。
  • .NET Core 是 CLR 和 BCL 的新版本,它是显式可移植的,可以在 Windows、 Linux 和 MacOS 上运行。
    • .NET Core 1.0 and .NET Core 2.0's base class libraries were considered anemic compared to the full-fat .NET 框架 which is a Windows-exclusive.
    • .NET Core 3.0和开源的 WinForms,WPF 等组件的。NET 架构,。NET 核心现在已经可以替代。NET 框架,用于新的应用程序开发。
  • .NET 5 will be the new name of .NET Core after .NET Core 3 is released (.NET 5 is expected around late 2020).
    • . NET 5 什么都没有有关,与 ASP.NET 5.0无关,与 NET MVC 5无关。
    • 没有 .NET Core 4也没有 .NET Framework 5.0
  • ASP.NET Core in .NET”似乎是专门针对 .NET 5和更高版本的 ASP.NET Core第一版的最终名称。

我注意到“核心”是微软的 性感品牌为当前一代。NET 平台。NET 核心(即它们没有 Windows 依赖关系,因此是可移植的)。(就像微软在20世纪90年代使用 COM 或者 ActiveX 的时候把“ Active”加到东西上一样,比如 Active Desktop,Active Channel,ActiMates,Active Directory,ActiveSync 等等)。

  • 此外,实体框架核心仍然缺乏实体框架6的许多功能,这是因为它是一个重写,基本上-但它最终将达到奇偶校验。

因为有很多。NET 运行时和当前可用的 BCLs (。NET 架构,。NET Core,UWP,Xamarin (使用 Mono) ,Unity 等等)微软引入了 .NET 标准,它基本上是便携类库概念的重新启动: Visual Studio 项目的目标是公共功能的一个已知子集,而不是一个特定的实现。但重要的是,ASP.NET Core 1ASP.NET Core 2的目标。NET 标准,而不是。NET 核心-这意味着 ASP.NET 核心运行在。除了运行在。NET 核心。

我注意到以前。NET 跨平台兼容性技术现在已经过时了(包括瞄准 CompactFramework 子集、可移植类库,甚至是 Visual Studio 中的“共享项目”) ,因为它们是为其他版本的。NET,例如。NET CompactFramework、 XNA、 Silverlight 和 WindowsPhone7的子集。

2019年5月,微软发布.NET 5”。简而言之,.NET 框架正在被 .NET 核心取代,下一个版本的。后的 NET 核心。NET Core 3.0将被命名为 .NET 5)。这个声明与 ASP.NET 核心没有任何关系,除了。NET 5将完全支持运行在它上面的 NET Core 3.0应用程序。

贯穿新冠主题的2020年夏天微软终于落下帷幕。NET 5和 ASP.NET 内核。截至2020年10月,ASP.NET Core 的 NuGet 软件包版本已经从3.1. x 跃升至5.0.0——所以看起来 ASP.NET Core 的下一个主要版本将是版本化的 5.x.x,这意味着它的发行版 将被命名为“ ASP.NET Core 5”,尽管最近微软的博客文章建议将其命名为“ ASP.NET Core for。NET 5”——尽管这整个线程是在“ ASP.NET MVC 5”和“ ASP.NET 5”的混乱中创建的,我确信命名它为“ ASP.NET Core 5”或“ ASP.NET Core for。NET 5“ 绝对不会让人感到困惑,没有先生-ee-bob!

In summary:

  • NET MVC 5 :
    • NET MVC 5 ASP.NET MVC 4的一个短命的继承者。
    • 它于2014年与 NET Web API 2一起发布。
    • 它实际上运行在 ASP.NET 4之上(即。NET 4.x 版本的 System.Web.dll)。注意,整个 ASP.NET MVC库现在已经过时了。
  • NET 5 被 EOL 改名为 ASP.NET Core,内置“ ASP.NET MVC 5”功能。
  • NET Core 1 ASP.NET Core 2都可以运行。NET 核心(跨平台)或。NET 框架(Windows) ,因为它的目标是。NET 标准。
  • ASP.NET Core 3 now only runs on .NET Core 3.0.
  • NET Core 4 不存在,也从未存在过。
  • NET Core 5 存在(截至2020年8月) ,但它的官方名称似乎是“ ASP.NET Core for。NET 5”,它只能在 .NET 5上运行。

全部(按时间顺序) :

  • ASP.NET 1 - 2001. Included 网上表格. Ran on .NET Framework 1.0 and 1.1. System.Web.dll.
  • NET 2.0 -2005. 包括 网上表格. 在.NET Framework 2.0. System.Web.dll上运行。
  • NET MVC 1 ASP.NET MVC 2-2008-2009. 运行在 ASP.NET 2.0. System.Web.Mvc.dll之上。
  • NET 4.0 -2010。包括 网上表格。在.NET Framework 4.0上运行。没有 ASP.NET 3.0
  • NET MVC 3 ASP.NET MVC 4-2010-2013. 运行在 ASP.NET 4.0. System.Web.Mvc.dll之上。
  • NET Web Api 1 -2012. 运行在 ASP.NET 4.0. System.Web.Http.dll之上。
  • NET MVC 5 -2013.只是 ASP.NET MVC的又一个更新。在 ASP.NET 4.0上运行,但也可以在 OWIN 下独立运行而不需要 System.Web.dll
  • NET Web API 2 -2013. NET MVC 5的兄弟。也可以在 OWIN 下不使用 ASP.NET 4.0运行。
  • NET MVC 6 -2014-2015.在达到候选发布状态后中止,并在2016年以 NET 核心 MVC 1.0的形式重新启动,NET 核心 MVC 1.0ASP.NET Core 1的 MVC 和 Web API 组件。
  • NET 5 -2014.ASP.NET 这里描述的的主要重启。主要的变化包括合并 MVC、 Web 页面和 Web API ——以及删除 网上表格。NET 5达到了候选发布状态,但随后被重新命名为 ASP.NET 核心。从来就没有过 ASP.NET 6
  • NET Core 1 -2016. 在 .NET Framework 4.5.NET Core 1.0上运行。
  • .NET Core -2016. 可移植且最小化的.NET 运行时和类库。
  • .NET 标准 -2017。一种方法,使程序针对一组共同的功能,将在所有。NET 实现(。NET Framework 4.5及更高版本。NET Core 2.0及其后的版本,例如 Xamarin 等)。
  • NET Core 2 -2017-2018: where we are today 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年10月底,微软宣布 ASP.NET Core 3.0现在只能在即将发布的.NET Core 3.0上运行 (so it will no-longer run on the .NET Framework 4.7.x). This is a controversial move because it means there is now no upgrade path from ASP.NET Core 2.x to ASP.NET Core 3.x for applications that run on the .NET Framework 4.7.x because of dependencies that don't support .NET Core yet, which means there likely won't be a .NET Standard 3.0.
  • .NET 5 -2019年5月: 微软发布了下一个版本。NET Core 在 .NET Core 3.1之后不会被称为“ .NET Core 4.0”或者“ .NET Core 5.0”,但是会跳转到版本号5.0并且丢弃“ Core”的标志,因此是“ .NET 5.0”。
  • 开启 ASP.NET Core 3.0。NET 5 -在2019年5月的 .NET 5发布会上,微软还声明 ASP.NET Core 3.0应用程序将运行在 .NET 5上。NET 5.目前还不清楚 ASP.NET Core 2.x 应用程序是否能够在未经修改的情况下运行。NET 5.
  • ASP.NET Core vNext on .NET 5 - August 2020: With the impending release of .NET 5, 微软已经将 ASP.NET Core 的 NuGet 软件包版本号提升到了 5.0.0. Microsoft has not yet formally/officially referred to this new release of ASP.NET Core as "ASP.NET Core 5", but I see it as a foregone conclusion.
  • ASP.NET 核心用于。NET 5 最近一篇2020年9月的博客文章暗示微软将 ASP.NET Core 的下一个版本称为“ NET 5的 ASP.NET 核心”(是的,这个名字很拗口——至少它不像之前的名字那么模棱两可)。

时间表和框图

(做这个我有点忘乎所以了...)

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

这个答案将试图只关注 ASP.NET MVC 5,尽可能少地关注 ASP.NET Core。

产品生命周期

微软仍然支持这一点(幸运的是,这不是来自另一个答案的“短命”版本) ,而且目前还没有生命终结公告,

Https://www.asp.net/support

框架/产品退休

NET MVC 4 July 1st,20192019年7月1日

NET MVC 5

因此,如果您愿意,您可以继续使用它(如 VB6和经典的 ASP 用户,他们仍然受到微软的支持)。

如果您确实检查了 Microsoft 关于产品生命周期的文档,那么.NET Framework 4.5.2及以上版本仍然是完全支持的。

维修

但是,您需要注意到 ASP.NET MVC 5处于维护模式,因为目前开发资源几乎都在 ASP.NET Core 上。

你确实得到了,

  • 来自 NuGet.org 的不可预知的补丁发布。

如果您监视相关的 NuGet 包,那么您应该注意到,即使是最近,Microsoft 也对它们进行了更新,以修复安全漏洞等等。

  • 封锁了文件。

你从微软文档中看到的通知,实际上强调了第一句话“我们不再定期更新这些内容。”这完全有道理,因为 ASP.NET MVC 5是坚如磐石的,所以你不应该期望新的材料被添加任何更多。

  • 非常有限的 bug 修复和新特性。

你说: “自从创建这个项目以来,我在 MVC 和实体框架中都发现了一些看起来像是 bug 的东西,结果却发现网络上唯一提到它们的地方似乎是 Core,而这是唯一被认为可以修复的地方。”

这要看你说的“虫子”是什么了。正如我前面所说,安全相关的问题仍在修补中,但是带有变通方法或功能限制的 bug 最不可能得到修复。它是一个开源项目,所以如果您真的想要,作为最后的手段,您可以自己解决这些问题。

On new features side, Microsoft does backport some features from ASP.NET Core, such as dependency injection, new configuration system, to simplify migration at certain degree. But don't expect much.

Migration

如果可以的话,一定要考虑迁移到 ASP.NET 核心。

I found this fragment from the introduction to 这篇文章 in Wikipedia to be a great sum up of the great answer provided here as 选择的答案. The same was originated in this Microsoft's blog post: https://devblogs.microsoft.com/dotnet/introducing-net-5/

(如果可能的话,我将把所有提到的技术链接到它自己的维基百科文章,以供进一步阅读。)

Final release of ASP.NET MVC: 28 November 2018. ASP.NET 核心 has since been released, which unified ASP.NET, ASP.NET MVC, ASP.NET Web API, and ASP.NET 网页 (a platform using only Razor pages). MVC 6 was abandoned due to Core and is not expected to be released. Core is currently planned to merge into ".NET 5".