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

xr2*_*0xr 41 .net asp.net asp.net-mvc asp.net-core-mvc .net-core

我一直在努力开展各种项目,显然微软一直在忙着做出一些重大改变,这让我感到很困惑.去年我安装Visual Studio 2017时,ASP.NET Core首次出现在我的雷达上,然后创建了一个新项目,突然选择了.NET Framework,.NET Standard和.NET Core.所以我稍微调查了一下,发现后两者在某种程度上是完整框架的缩写版本.我读过Scott Hanselman的这篇文章ASP.NET 5已经死了 - 介绍ASP.NET Core 1.0和.NET Core 1.0我也找到了这个,它让我远离ASP.NET Core:在ASP.NET和ASP.NET Core之间选择.我的内容是"核心是新的,你可以继续使用完整的框架." 所以我使用.NET Framework 4.6.2和Microsoft.AspNet.Mvc 5.2.3创建了一个新的ASP.NET MVC站点.

自从创建该项目以来,我发现MVC和实体框架中的一些错误似乎只是发现在网络上唯一提到它们似乎是在Core中,而这是他们被认为被修复的唯一地方.

现在,今天,我正在尝试查看System.Web.Mvc.Controller和System.Web.Mvc.JsonResult上的文档,除了Core文档之外它已经消失了.我终于把它挖到了这里,它说它不再被维护了?

我对Core 了解,并说,"好吧,我为什么要关心?我会继续做我正在做的事情,并在完成后再检查一下." 但现在似乎不再支持4.6.2了.有人可以解释发生了什么吗?我的.NET 4.6.2/MVC 5.2.3项目现在已经过时了吗?如果没有,为什么文件已经退役并被隐藏起来?我担心我的某些依赖项甚至可能不适用于Core或与Core兼容.

Dai*_*Dai 124

在过去的两年中,微软需要对.NET Core/DNX,ASP.NET Core,.NET Standard和其他方面的混淆程度进行良好的调整.

(我说这是DevDiv的前FTE SE ......)

  • ASP.NET又名"System.Web"现已死亡.WebForms已经死了(欢呼!)
  • 2008年推出的ASP.NET MVC是在ASP.NET之上构建的,但绕过了所有WebForms基础架构.
    • ASP.NET MVC有自己的版本,与ASP.NETASP.NET Web API(以及ASP.NET Core)分开.您链接到ASP.NET MVC 5的文档 - 这与ASP.NET 5不同.
  • 2012年推出的ASP.NET Web APIASP.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是在2016年推出的,作为ASP.NET MVC 5的改进设计,但没有依赖性System.Web.dll或任何(现在遗留的)IIS依赖项(例如旧的请求管道,IHttpHandler并且IHttpModule不再存在).
    • 请注意,ASP.NET Core的类库的根命名空间现在Microsoft.AspNet和不是System.Web.这对我来说是一个混乱的根源.这意味着将ASP.NET MVCASP.NET WebAPI中的项目升级到ASP.NET Core是不平凡的,尽管它们的控制器和中间件的基本架构是相同的.

除此之外,我们还有.NET Core(又名1.0): - .NET Core是CLR和BCL的新版本,它是可显式移植的,可在Linux和macOS上运行.与完全 独特的Windows .NET相比,它的类库有点贫血.

  • "Core"是当前一代.NET平台的新"微软"热门名称,它与.NET Core兼容(即它们没有Windows依赖性,因此是可移植的).(就像微软在20世纪90年代如果使用COM或ActiveX,如Active Desktop,Active Channels,ActiMates,Active Directory,ActiveSync等,将"Active"卡在事物上的方式.
  • 另外,实体框架核心仍然缺乏来自实体框架6的大量功能,这是因为它基本上是重写 - 但它最终会达到平价.

因此,为了使一切变得更好,Microsoft引入了.NET Standard,它基本上是可移植类库概念的重新启动:其中Visual Studio项目针对的是已知的常用功能子集,而不是特定的实现.(我只是希望他们从4开始编译版本以匹配.NET Framework而不是开始,System.Web.dll因为这让我重新考虑了2001.) - 但重要的是ASP.NET Core的目标是.NET Standard .NET Core - 这意味着除了在.NET Core上运行之外,ASP.NET Core还可以在Windows上的.NET Framework上运行.

综上所述:

  • ASP.NET MVC 5ASP.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 1ASP.NET Core 2可以在.NET Core(跨平台)或.NET Framework(Windows)上运行,因为它以.NET Standard为目标.
  • 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.Mvc.dll.
  • ASP.NET MVC 1ASP.NET MVC 2 - 2008-2009.掌握在ASP.NET 2.0之上.System.Web.dll.
  • ASP.NET 4.0 - 2010.包含的WebForms.在.NET Framework 4.0上运行.没有ASP.NET 3.0.System.Web.Mvc.dll.
  • ASP.NET MVC 3ASP.NET MVC 4 - 2010-2013.掌握在ASP.NET 4.0之上.System.Web.Http.dll.
  • ASP.NET Web Api 1 - 2012.在ASP.NET 4.0之上.System.Web.dll.
  • ASP.NET MVC 5 - 2013.只是ASP.NET MVC的另一个更新.在ASP.NET 4.0之上,但也可以在没有System.Web.HttpOWIN的情况下独立运行.
  • ASP.NET Web API 2 - 2013.与ASP.NET MVC 5同化.也可以在OWIN下没有ASP.NET 4.0的情况下运行.
  • ASP.NET MVC 6 - 2014-2015.在达到Release Candidate状态后中止,并在2016年重新启动为ASP.NET Core MVC 1.0,这是ASP.NET Core 1的MVC和Web API组件.
  • ASP.NET 5 - 2014. 这里描述了ASP.NET的主要重启.主要变化包括合并MVC,Web页面和Web API - 以及WebForms的删除.ASP.NET 5达到了Release Candidate状态,但随后被重新命名为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年10月下旬,微软宣布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时间轴的图表和一个框图,显示了.NET Framework,ASP.NET和ASP.NET MVC的组件如何组合在一起

  • @mz1378 WebForms 有大量的设计缺陷,使其与现代网络和可用性不兼容,我不会详细讨论;但即“回发”模型破坏了 HTTP 的 RESTful 语义。视图状态永远无法正常工作,并且气球要求大小。“页面”本质上违反了松耦合。并且整个平台不可能进行单元测试或用于集成测试。 (6认同)
  • ASP.NET 又名“System.Web”现已消亡。WebForms 已经死了(万岁!),为什么很多人讨厌这项在当时甚至现在都很棒的技术。在一个免费包中提供 Web 开发所需的一切。 (5认同)
  • 微软确实需要一巴掌。对于刚接触ASP.NET的人来说,这是一项艰巨的任务,需要经历非常相似(但又非常不同)的听起来技术。弄清楚这个烂摊子的好答案。 (4认同)
  • 红框中图表的底部 RHS...:) (3认同)
  • 多么混乱啊。 (3认同)
  • 我也是全职 .net 开发人员,但现在正在认真考虑切换 python 和 java。微软正在让开发者疯狂。查看新的 Razor 页面,它们是 webform/mvc 的混合体。 (2认同)
  • 天啊,谢谢你的更新。我一直在沉迷于 ASP.NET Web 表单,我很高兴我没有将我的非常大的 ASP.NET 应用程序更新为 ASP.NET MVC。 (2认同)
  • 这太疯狂了。一巴掌打在脸上?我们都应该因为使用这些垃圾而被打一巴掌。不是微软,他们在做他们的事,我们作为开发者应该对这种无意义的行为负责。微软表现得更聪明,离开,他们就会跟随。难怪 Web 开发人员很久以前就转向了 Linux/Mac。来自linux,这完全是无意义的。 (2认同)
  • 还应该有一个微软认证来了解微软所做的这么多改变。 (2认同)

Lex*_* Li 8

这个答案将尝试仅关注ASP.NET MVC 5,并尽可能少关注ASP.NET Core.

产品生命周期

微软仍然支持这一点,并且尚未宣布终止,

https://www.asp.net/support

框架/产品退休

ASP.NET MVC 4 2019年7月1日

ASP.NET MVC 5

所以,如果你愿意,继续使用它.请记住,微软仍然支持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和实体框架中的一些错误只是发现在网络上唯一提到它们似乎是在Core中,这是他们被认为是被修复的唯一地方".

嗯,这真的取决于你所谈论的"错误".就像我之前所说的那样,安全相关的问题仍在修补,但是有解决方法或功能限制的错误最不容易修复.这是一个开源项目,所以如果你真的想要,你可以自己解决问题,作为最后的手段.

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

移民

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