我迷路了。 ASP.NET MVC 5发生了什么?

时间:2018-07-17 22:23:43

标签: asp.net .net asp.net-mvc .net-core asp.net-core-mvc

我一直在努力处理各种项目,显然Microsoft一直在忙于进行一些重大更改,这使我感到困惑。去年我安装Visual Studio 2017并去创建一个新项目时,ASP.NET Core首次引起了我的注意,突然选择了.NET Framework,.NET Standard和.NET Core。因此,我仔细研究了一下它们,发现后两者在某种程度上是完整框架的缩写版本。我阅读了Scott Hanselman ASP.NET 5 is dead - Introducing ASP.NET Core 1.0 and .NET Core 1.0的帖子,也发现了这一点,这使我远离ASP.NET Core:Choose between ASP.NET and ASP.NET Core。我的观点是“ Core是新的,您可以继续使用完整的框架。”因此,我使用.NET Framework 4.6.2和Microsoft.AspNet.Mvc 5.2.3创建了一个新的ASP.NET MVC网站。

自创建该项目以来,我发现MVC和Entity Framework中似乎都存在一些错误,只是发现在Web上唯一提及它们的地方似乎是在Core中,这是被认为是固定的唯一地方。

现在,今天,我正在尝试查找有关System.Web.Mvc.Controller和System.Web.Mvc.JsonResult的文档,除了核心文档下的内容已消失。我终于把它here挖了,上面说它不再被维护了?

我了解this much关于Core的问题,并说:“好吧,我为什么要关心?我将继续做我正在做的事情,并在完成后再检查一下。”但是现在看来,甚至不再支持4.6.2。有人可以解释发生了什么吗?我的NET 4.6.2 / MVC 5.2.3项目现在已经过时了吗?如果不是,为什么将这些文档退却并隐藏起来?我担心我的某些依赖项可能甚至无法用于Core或与Core兼容。

3 个答案:

答案 0 :(得分:73)

每当发布新的.NET公告时,该答案就会定期更新,并且已更新了ASP.NET Core 3.0,.NET 3和.NET 5的详细信息

过去三年来,Microsoft需要对.NET Core / DNX,ASP.NET Core,.NET Standard,.NET 5和其他方面的混乱状况给予良好的掌声。

(我是说,作为DevDiv的前FTE SE ... (“来自16号楼的嗨!”

  • ASP.NET (又名“ System.Web”)现在已失效。 WebForms已死(呼啦!)
  • 2008年发布的
  • ASP.NET MVC 是在ASP.NET之上构建的,但是绕过了大多数WebForms基础结构。
    • ASP.NET MVC 具有与 ASP.NET ASP.NET Web API (和 ASP.NET)分开的版本。 NET Core )。您已链接到 ASP.NET MVC 5 的文档-这与 ASP.NET 5 并不相同。
  • 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应用程序结合在一起是一件痛苦的事情。
  • 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 作为ASP.NET MVC 5的改进设计于2016年推出,但没有依赖于System.Web.dll或任何(现在为旧的)IIS依赖项(例如旧的请求管道,IHttpHandlerIHttpModule不再存在)。
    • 请注意, 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 的基类库被认为是贫血的Windows专有的.NET Framework
    • 使用 .NET Core 3.0 以及WinForms,WPF和.NET Framework的其他组件的开源,.NET Core现在可以作为Windows中.NET Framework的替代品用于新应用程序开发。
  • .NET Core 3 发布之后,
  • .NET 5 将成为.NET Core的新名称(预计.NET 5将于2020年末推出)。
    • .NET 5 ASP.NET 5.0 ASP.NET MVC 5 完全无关。 。
    • 没有 .NET Core 4 ,也没有 .NET Framework 5.0

我注意到,“ Core”是Microsoft的 hot 品牌,它是与.NET Core一起使用的当前.NET平台的代名词(即它们没有Windows依赖关系,因此是可移植的)。 (就像Microsoft在1990年代使用COM或ActiveX时如何将“ Active”固定在事物上一样,例如Active Desktop,Active Channels,ActiMate,Active Directory,ActiveSync等)。  -另外,实体框架核心仍然缺少实体框架6的许多功能,这是因为基本上是重写,但最终会达到同等水平。

因为当前有许多.NET运行时和BCL(.NET Framework,.NET Core,UWP,Xamarin(使用Mono),Unity等),所以Microsoft引入了 .NET Standard 。基本上是对可移植类库概念的重新启动:Visual Studio项目以通用功能的已知子集为目标,而不是特定的实现。 (我只希望他们将版本号从4开始以匹配.NET Framework,而不是从1.0开始,因为那让我重新考虑了2001。) -但重要的是 ASP.NET Core 1 ASP.NET Core 2 的目标是.NET Standard而不是.NET Core-这意味着ASP.NET Core可以运行除了可以在.NET Core之上运行之外,还可以在Windows的.NET Framework之上运行。

我注意到,所有以前的.NET跨平台兼容性技术现在都已过时(包括针对Compact Framework子集,可移植类库,甚至是Visual Studio中的“共享项目”),因为它们适用于其他版本。 .NET Compact Framework,XNA,Silverlight和Windows Phone 7的子集等不再存在的.NET。

2019年5月,Microsoft announced ".NET 5"。简而言之,将 .NET Framework 替换为 .NET Core (具体而言:.NET Core 3.0之后的.NET Core的下一版本将被命名为。 NET 5 )。除了.NET 5将完全支持在其上运行的 ASP.NET Core 3.0 应用程序这一事实外,该公告根本不涉及 ASP.NET Core (ASP.NET Core 4可能会在那时发布)

总结:

  • ASP.NET MVC 5 ASP.NET MVC 4 的短暂继承者,与 ASP.NET Web API 2 一起发布。它实际上是在 ASP.NET 4 (即System.Web.dll的.NET 4.x版本)上运行的。平台 ASP.NET MVC 现在已过时。
  • ASP.NET 5 已停产,并更名为 ASP.NET Core ,并且其中包含内置的“ ASP.NET MVC 5”功能。 / li>
  • ASP.NET Core 1 ASP.NET Core 2 可以在.NET Core(跨平台)或.NET Framework(Windows)上运行,因为它的目标是.NET标准。
  • ASP.NET Core 3 现在仅可在 .NET Core 3.0 上运行。

所有这些(按时间顺序):

  • ASP.NET 1 -2001。包括 WebForms 。跑.NET Framework 1.0和1.1。 System.Web.dll
  • ASP.NET 2.0 -2005。包括 WebForms 。在.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。包括 WebForms 。在.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 之上运行,但也可以在OWIN下无需System.Web.dll独立运行。
  • ASP.NET Web API 2 -2013。同级为 ASP.NET MVC 5 。在OWIN下也可以在没有 ASP.NET 4.0 的情况下运行。
  • ASP.NET MVC 6 -2014-2015年。在达到候选版本状态后中止,并在 ASP.NET Core MVC 1.0 中重新启动,这是 ASP.NET Core 1 的MVC和Web API组件。
  • ASP.NET 5 -2014年。ASP.NETdescribed here的重大重启。主要更改包括合并MVC,Web页和Web API-以及删除 WebForms 。 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 -In late October 2018 Microsoft announced ASP.NET Core 3.0 will now only run on the upcoming .NET Core 3.0(因此它将不再在.NET Framework 4.7.x上运行)。这是一个有争议的举动,因为这意味着由于不支持依赖项,对于在.NET Framework 4.7.x上运行的应用程序,现在没有从ASP.NET Core 2.x到ASP.NET Core 3.x的升级路径。 .NET Core,这意味着可能不会有.NET Standard 3.0。
  • .NET 5上的ASP.NET Core 3.0 -在2019年5月发布的 .NET 5 中,微软表示ASP.NET Core 3.0应用程序将在.NET 5上运行。 NET5。目前尚不清楚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

答案 1 :(得分:7)

此答案将尝试仅专注于ASP.NET MVC 5,并尽可能减少ASP.NET Core。

产品生命周期

Microsoft仍然支持此功能,并且尚未宣布终止寿命,

https://www.asp.net/support

  

框架/产品报废

     

ASP.NET MVC 2019年7月1日

     

ASP.NET MVC 5

因此,如果您愿意,请继续使用它。请记住,Microsoft仍支持VB6和经典ASP用户。

如果确实要检查产品生命周期上的Microsoft文档,则仍支持

.NET Framework 4.5.2及更高版本。

维护

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

你知道,

  • 来自NuGet.org的不可预测的修补程序版本。

如果您监视相关的NuGet程序包,则应注意,即使在最近,Microsoft也对其进行了更新,以修复安全漏洞等。

  • 已锁定文档。

您从Microsoft Docs看到的通知实际上强调了第一句话:“我们不再定期更新此内容。”这完全是有道理的,因为ASP.NET MVC 5坚如磐石,因此您不应期望再添加任何新材料。

  • 非常有限的错误修复和新功能。

您说:“自创建该项目以来,我发现MVC和Entity Framework中似乎都存在一些错误,只是发现在Web上唯一提及它们的地方似乎是在Core中,这是它们唯一存在的地方被认为是固定的。”

嗯,这实际上取决于您在说什么“错误”。就像我之前说的,与安全相关的问题仍在修补中,但是具有变通办法或功能限制的错误最不可能得到修复。这是一个开源项目,因此,如果您确实需要,可以作为最后的解决方法自行解决问题。

在新功能方面,Microsoft确实从ASP.NET Core移植了一些功能,例如依赖项注入,新的配置系统,以在一定程度上简化迁移。但是不要期望太大。

迁移

如果可以的话,请考虑迁移到ASP.NET Core。

答案 2 :(得分:0)

我发现维基百科中 this article 简介中的这个片段是对此处提供的 the selected answer 的精彩答案的一个很好的总结。同样起源于这篇 Microsoft 的博客文章:https://devblogs.microsoft.com/dotnet/introducing-net-5/

(我会尽可能将提到的每项技术链接到其自己的维基百科文章,以供进一步阅读。)

<块引用>

ASP.NET MVC 的最终版本:2018 年 11 月 28 日。ASP.NET Core 此后发布,统一了 ASP.NETASP.NET MVC、ASP.NET Web API 和 {{3} (仅使用 Razor 页面的平台)。 MVC 6 由于 Core 被放弃,预计不会发布。 Core 目前计划并入“ASP.NET Web Pages 5”。