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


78

我一直不停地致力于各种项目,显然Microsoft一直在忙于进行一些大的更改,这使我感到困惑。去年我安装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之间进行选择。我的观点是“ 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的文档,除了Core文档下的文档已消失。我终于在这里找到了它不再被维护的地方进行了挖掘?

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


10
我无法回答您所有的问题,但是将.NET Core视为“完整框架的简化版本”是非常错误的-在许多方面,.NET Core现在已经超越了.NET Framework的范畴。两者都不是另一个的子集。简短的版本是“是的,.NET Framework仍然存在,但是:如果可以,您应该计划迁移到.NET Core”。您提到的依赖关系问题并非微不足道,但是大多数常见的库已经支持.NET Core或.NET Standard。但是没有人会让您动容,许多应用程序将无限期地继续使用.NET Framework。
Marc Gravell

1
您可以将ASP,Net Core MVC项目作为目标以在完整的.Net Framework上运行。
jmoerdyk '18年

谢谢@MarcGravell。我只是继续阅读该核心,缺少某些功能,并且无法使用某些东西,因为它是从头开始重建的,但还没有完成,但是没有人具体说明这些东西是什么。是下一个.Net版本还是该框架分为两个版本?我讨厌采用core,然后发现它不支持以前版本中提供的某些重要功能。
xr280xr

似乎我在ASP.NET Core和.NET Core之间也有一些混淆。
xr280xr

1
@Dai .NET Core一个独立的部署选项(当前是实验性的),但是您不需要使用它。但是,以这种方式部署到客户端也许更容易,但这可能会使客户端应用程序很有吸引力。就是说:.NET核心的更新速度比.NET框架快得多;如果说,您可能会更快地获得.NET core的修复程序。但是,是的,问题是:是否已部署该修补程序?
Marc Gravell

Answers:


225

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

微软需要对过去的困惑大打耳光 3年 在.NET Core / DNX,ASP.NET Core,.NET Standard,.NET 5及其他方面拥有5年的经验。

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

  • ASP.NET aka“ 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 MVCSystem.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是CLR和BCL的新版本,可明确移植并且可在Windows,Linux和macOS上运行。
    • 与Windows专有的全功能.NET Framework相比,.NET Core 1.0.NET Core 2.0的基类库被认为是贫乏的。
    • 通过.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
  • ASP.NET Core for .NET 5 ”似乎是专门针对.NET 5第一版ASP.NET Core的最终名称。

我注意到,“ Core”是Microsoft与当前可与.NET Core一起使用的.NET平台的热门品牌(即,它们没有Windows依赖关系,因此可移植)。(就像Microsoft在1990年代使用COM或ActiveX时将“ Active”粘贴到事物上一样,例如Active Desktop,Active Channels,ActiMate,Active Directory,ActiveSync等)。

  • 另外,Entity Framework Core仍然缺少Entity Framework 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 1ASP.NET核心2 目标是.NET Standard而不是.NET Core-这意味着ASP.NET Core不仅可以在.NET Core之上运行,而且还可以在Windows上的.NET Framework之上运行。

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

在2019年5月,Microsoft宣布了“ .NET 5”。简而言之,.NET Framework将被.NET Core取代,.NET Core 3.0之后的.NET Core的下一版本将被命名为.NET 5。除了.NET 5将完全支持在其上运行的ASP.NET Core 3.0应用程序这一事实外,此公告根本不涉及ASP.NET Core

在2020年整个以Covid为主题的夏天中,Microsoft完成了.NET 5和ASP.NET Core的定稿。截至2020年10月,ASP.NET Core的NuGet软件包版本已从3.1.x跃升至5.0.0-因此,似乎将对ASP.NET Core的下一个主要版本进行版本控制5.x.x,这表明其发行版可能称为“ ASP。 “ NET Core 5 ”,尽管最近的Microsoft博客文章建议将该名称命名为“ .NET 5的ASP.NET Core”-尽管考虑到整个线程是出于对“ ASP.NET MVC 5”和“ ASP.NET”的混淆而创建的5”,我敢肯定,将其命名为“ ASP.NET Core 5”或“ ASP.NET Core for .NET 5”绝对不会造成任何混淆,没有sir-ee-bob!

综上所述:

  • ASP.NET MVC 5
    • ASP.NET MVC 5ASP.NET MVC 4的短暂后继。
    • 它在2014年与ASP.NET Web API 2一起发布。
    • 它实际上在ASP.NET 4(即的.NET 4.x版本System.Web.dll)上运行。请注意,整个ASP.NET MVC库现在已过时。
  • ASP.NET 5经过EOL认证,并更名为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 Core 4不存在,也永远不存在。
  • ASP.NET Core 5存在(截至2020年8月),但是其正式名称似乎是“ .NET 5的ASP.NET Core”,并且仅在.NET 5上运行。

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

  • 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 1ASP.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.0System.Web.dll
  • ASP.NET MVC 3ASP.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.dllOWIN的情况下独立运行。
  • ASP.NET Web API 2-2013。同级到ASP.NET MVC 5。也可以在OWIN下不使用ASP.NET 4.0的情况下运行。
  • ASP.NET MVC 6-2014-2015。在达到候选版本状态后中止,并于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达到了“候选发布”状态,但随后更名为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核心3 - 2018年十月下旬,微软宣布ASP.NET 3.0的核心现在仅在即将到来的.NET 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- 2019年5月:Microsoft宣布.NET Core 3.1之后的下一个.NET Core版本不会被称为“ .NET Core 4.0”或“ .NET Core 5.0”,但会跳至版本号5.0并放弃“ Core” “品牌”,因此是“ .NET 5.0 ”。
  • .NET 5上的ASP.NET Core 3.0-在2019年5月发布的.NET 5中,微软还声明ASP.NET Core 3.0应用程序将在.NET 5上运行。目前尚不清楚ASP.NET Core 2.x应用程序是否将能够在.NET 5上未经修改地运行。
  • .NET 5上的ASP.NET Core vNext- 2020年8月:随着即将发布的.NET 5Microsoft将ASP.NET Core的NuGet软件包的版本号提高到5.0.0。Microsoft尚未正式/正式将这个新版本的ASP.NET Core称为“ ASP.NET Core 5”,但我认为这已成定局。
  • 适用于.NET 5的ASP.NET Core于2020年9月发布的最新博客文章表明,Microsoft将ASP.NET Core的下一个版本称为“适用于.NET 5的ASP.NET Core ”。它不像以前的名称那样模棱两可)。

时间线和框图

(我很生气使这个...)

带有ASP.NET时间轴的图和显示.NET Framework,ASP.NET和ASP.NET MVC组件如何组合的框图


18
微软确实需要一巴掌。对于刚接触ASP.NET的人来说,这是一项艰巨的任务,需要经历非常相似(但又非常不同)的听起来技术。弄清楚这个烂摊子的好答案。
luckman777 '19

2
红色方框图中的底部RHS ... :)
Ashby

3
ASP.NET aka“ System.Web”现在已死。WebForms已经死了(哇!),为什么很多人都讨厌这种在当时甚至现在都很棒的技术。在一个免费的软件包中提供Web开发所需的一切。
mz1378 '19

5
@ mz1378 WebForms具有大量的设计缺陷清单,这些缺陷使它与我不会涉及的现代Web和可用性不兼容。但是,“回发”模型破坏了HTTP的RESTful语义。Viewstate永远无法正常工作,气球提示会要求尺寸。“页面”本质上违反了松散耦合。而且整个平台都无法进行单元测试或在集成测试中使用。

1
@ mz1378“控件”使您无法控制标记。现在,我正在开发一个2012年编写的关键任务应用程序,该应用程序具有来自第三方二进制文件的控件,该控件将jQuery 1.2嵌入到每个页面中(使用ScriptManager)。这是一个巨大的PITA。

10

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

产品生命周期

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

https://www.asp.net/support

框架/产品退役

ASP.NET MVC 4 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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.