我迷路了。 ASP.NET MVC 5 发生了啥?
Posted
技术标签:
【中文标题】我迷路了。 ASP.NET MVC 5 发生了啥?【英文标题】:I'm lost. What happened to ASP.NET MVC 5?我迷路了。 ASP.NET MVC 5 发生了什么? 【发布时间】:2018-07-17 22:23:42 【问题描述】:我一直在低头处理各种项目,显然微软一直忙于做出一些重大改变,这让我很困惑。当我去年安装 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。我的收获是“核心是新的,你可以继续使用完整的框架。”所以我使用 .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 兼容。
【问题讨论】:
我无法回答您的所有问题,但将 .NET Core 视为“完整框架的缩略版”是非常错误 - 在许多方面, .NET Core 现在正在超越 .NET Framework;两者都不是另一个的子集。简短的版本是“是的,.NET Framework 将继续存在,但是:如果可以,您应该计划迁移到 .NET Core”。您提到的依赖问题并非微不足道,但大多数常见库已经支持 .NET Core 或 .NET Standard。但是没有人会让你动起来,许多应用程序将无限期地继续使用 .NET Framework。 您可以针对 ASP、Net Core MVC 项目在完整的 .Net Framework 上运行。 谢谢@MarcGravell。我一直在读到核心缺少某些功能并且不适用于某些东西,因为它正在从头开始重建,但尚未完成,但没有人具体说明这些东西是什么。是下一个 .Net 版本还是框架分为两个?我不愿意采用核心,然后发现它不支持过去版本中可用的某些重要功能。 @MarcGravell “你应该计划迁移到 .NET Core” - 如果桌面应用程序必须迁移到 DNX,我会非常不舒服:我的用户不需要额外的 20MB 运行时和依赖项我的每个相对较小的应用程序包。那么核心运行时的安全更新呢?由于 DNX 应用程序是孤立的并且存在于它们自己的孤岛中,因此不可能像使用 .NET Framework 那样一次性更新共享组件。 DNX 仅适用于可以轻松从源代码重建的服务器应用程序,而不是面向最终用户的桌面应用程序。 @Dai .NET Core有一个独立的部署选项(目前是实验性的),但你不需要使用它。不过,以这种方式部署到客户端可能更容易,这是同意的——这可能会让客户端应用程序很有吸引力。也就是说:.NET 核心的发展速度比 .NET 框架快得多;如果说您可能会更快获得 .NET 核心的修复。但是,是的,那么问题是:是否部署了该修复程序? 【参考方案1】:(每当发布新的 .NET 公告时都会定期更新此答案,并且已更新 ASP.NET Core 3.0、.NET 3 和 .NET 5 的详细信息)
对于过去 3 年 5 年在 .NET Core / DNX、ASP.NET Core、.NET Standard、.NET 5 和其他方面的混乱程度,Microsoft 需要好好打一记耳光。
(我是说作为 DevDiv 的前 FTE SE...("hi from building 16!"))
ASP.NET 又名“System.Web”现在已经死了。 WebForms 已死(万岁!) ASP.NET MVC 于 2008 年推出,构建于 ASP.NET 之上,但绕过了大部分 WebForms 基础架构。 ASP.NET MVC 有自己的版本控制,独立于 ASP.NET 和 ASP.NET Web API(以及 ASP.NET Core)。您链接到 ASP.NET MVC 5 的文档 - 这与 ASP.NET 5 不同。 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 应用程序结合起来是一种痛苦的练习。
ASP.NET MVC 5 于 2014 年作为 ASP.NET MVC 4 的更新推出。它与 ASP.NET 5 无关。
我确实注意到 ASP.NET MVC 5 是 where we had both System.Web.Mvc
and Microsoft.Web.Mvc
namespaces - which is confusing。幸运的是,这只是昙花一现,与今天无关。
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 依赖项(例如旧的请求管道,@ 987654336@ 和 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 的基类库与 full-fat .NET Framework 相比被认为是乏善可陈的 这是 Windows 独有的。
随着 .NET Core 3.0 以及 WinForms、WPF 和其他 .NET Framework 组件的开源,.NET Core 现在已准备好在 Windows 中替代 .NET Framework 以用于新应用程序发展。
.NET 5 将是 .NET Core 3 发布后的 .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 in .NET”似乎是专门针对 .NET 5ASP.NET Core 的第一个版本的最终名称/strong> 及更高版本。
我注意到,“Core”是 Microsoft 的 hot 品牌,适用于与 .NET Core 配合使用的当前一代 .NET 平台(即它们没有 Windows 依赖项,因此是可移植的)。 (就像微软在 1990 年代使用 COM 或 ActiveX 时如何将“Active”固定在事物上一样,例如 Active Desktop、Active Channels、ActiMates、Active Directory、ActiveSync 等)。
此外,Entity Framework Core 仍然缺少 Entity Framework 6 的很多功能,这是因为它基本上是重写的,但最终会达到同等水平。因为目前有许多 .NET 运行时和 BCL(.NET Framework、.NET Core、UWP、Xamarin(使用 Mono)、Unity 等)微软推出了 .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,例如 .NET Compact Framework、XNA、Silverlight 和 Windows Phone 7 的子集。
2019 年 5 月,Microsoft announced ".NET 5"。简而言之,.NET Framework正在被.NET Core取代,.NET Core 3.0之后的下一个.NET Core版本将命名为.NET 5)。此公告与 ASP.NET Core 完全无关,只是 .NET 5 将完全支持在其上运行的 ASP.NET Core 3.0 应用程序。
在 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 博客文章建议名称将是“ASP.NET Core for .NET 5”——尽管考虑到整个线程都是创建的出于对“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 5 是 ASP.NET MVC 4 的短暂继承者。 它于 2014 年与 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”的功能。
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 Core 4 不存在,也从来没有。
ASP.NET Core 5 存在(截至 2020 年 8 月),但它的正式名称似乎是“ASP.NET Core for .NET 5”,它只能在 .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 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 同级。也可以在没有 ASP.NET 4.0 的情况下在 OWIN 下运行。
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 described here 的重大重启。主要更改包括合并 MVC、网页和 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 上运行)。这是一个有争议的举动,因为这意味着现在没有从 ASP.NET Core 2.x 到 ASP.NET Core 3.x 的升级路径,因为依赖项不支持,所以在 .NET Framework 4.7.x 上运行的应用程序.NET Core,这意味着可能不会有 .NET Standard 3.0。
.NET 5 - 2019 年 5 月:微软宣布在 .NET Core 3.1 之后的下一个版本 .NET Core 不会被称为“.NET Core 4.0”或“.NET Core” 5.0”,但会跳到版本号 5.0 并放弃“Core”品牌,因此是“.NET 5.0”。
ASP.NET Core 3.0 on .NET 5 - 在 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 5 即将发布,Microsoft has bumped the version numbers of the NuGet packages for ASP.NET Core to 5.0.0
。 Microsoft 尚未正式/正式将这个新版本的 ASP.NET Core 称为“ASP.NET Core 5”,但我认为这是已成定局。
适用于 .NET 5 的 ASP.NET Core 2020 年 9 月的一篇更新的博客文章表明,微软将 ASP.NET Core 的下一版本称为“适用于 .NET 5 的 ASP.NET Core ”(是的,这有点拗口——至少它不像以前的名字那样模棱两可)。
更新(2021 年 9 月):It seems that the official name is now ASP.NET Core in .NET 5,以及用于 .NET 6 的 it seems they've gone with ASP.NET Core in .NET 6。
时间线和框图
(我做这个被冲昏了头脑……)
【讨论】:
微软确实需要一记耳光。作为刚接触 ASP.NET 世界的新人,涉足非常相似(但又非常不同)的技术是一项艰巨的任务。澄清这个烂摊子的好答案。 红框内图表的右下角... :) ASP.NET aka "System.Web" 现在已经死了。 WebForms 已经死了(欢呼!),为什么很多人讨厌这种在当时甚至现在都很棒的技术。在一个免费包中提供 Web 开发所需的一切。 @mz1378 WebForms 有大量的设计缺陷清单,使其与现代网络和可用性不兼容,我不会深入探讨;但是,即“回发”模型打破了 HTTP 的 RESTful 语义。 Viewstate 永远不会正常工作,并且气球会请求大小。 “页面”本质上违反了松散耦合。而且整个平台无法进行单元测试或在集成测试中使用。 我也是全职 .net 开发人员,但现在正在认真考虑切换 python 和 java。微软让开发者疯狂。查看新的 Razor 页面,它们是 webform/mvc 的混合体。【参考方案2】:此答案将尝试仅关注 ASP.NET MVC 5,并尽可能少地关注 ASP.NET Core。
产品生命周期
Microsoft 仍然支持这一点(幸运的是,它不是另一个答案的“短命”版本),并且还没有终止生命周期的公告,
https://www.asp.net/support
框架/产品退役
ASP.NET MVC 4 2019 年 7 月 1 日
ASP.NET MVC 5
因此,如果您愿意,您可以继续使用它(如 VB6 和经典 ASP 用户,它们仍受 Microsoft 支持)。
如果您确实查看了有关产品生命周期的 Microsoft 文档,仍然完全支持 .NET Framework 4.5.2 及更高版本。
维护
但是,您确实需要注意 ASP.NET MVC 5 处于维护模式,因为开发资源现在几乎都在 ASP.NET Core 上。
你确实得到了,
来自 NuGet.org 的不可预测的补丁版本。如果您监控相关的 NuGet 包,您应该注意到,即使是最近微软也更新了它们以修复安全漏洞等等。
锁定文档。您在 Microsoft Docs 中看到的通知实际上强调了第一句话“我们不再定期更新此内容”。这很有意义,因为 ASP.NET MVC 5 是坚如磐石的,所以您不应该再期望添加新材料。
非常有限的错误修复和新功能。您说“自从创建该项目以来,我发现 MVC 和 Entity Framework 中似乎存在一些错误,只是发现网络上唯一提到它们的似乎是在 Core 中,而这是它们唯一存在的地方被认为是固定的。”
嗯,这真的取决于你在谈论什么“错误”。就像我之前说的,与安全相关的问题仍在修补中,但具有变通办法或功能限制的错误最不可能得到修复。这是一个开源项目,所以如果你真的想要,你可以自己解决问题,作为最后的手段。
在新特性方面,微软确实从 ASP.NET Core 中向后移植了一些特性,例如依赖注入、新的配置系统,以在一定程度上简化迁移。但不要期望太多。
迁移
如果可以,请考虑迁移到 ASP.NET Core。
【讨论】:
【参考方案3】:我从***中this article 的介绍中发现这个片段是对这里提供的出色答案the selected answer 的一个很好的总结。同样的起源于这篇微软的博文:https://devblogs.microsoft.com/dotnet/introducing-net-5/
(在可能的情况下,我会将提到的每项技术链接到它自己的***文章,以供进一步阅读。)
ASP.NET MVC 最终版本:2018 年 11 月 28 日。ASP.NET Core 已经发布,它统一了 ASP.NET、ASP.NET MVC、ASP.NET Web API 和 ASP.NET Web Pages(仅使用 Razor 页面的平台)。 MVC 6 因 Core 而被放弃,预计不会发布。 Core目前计划合并到“.NET5”中。
【讨论】:
以上是关于我迷路了。 ASP.NET MVC 5 发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 5 Azure App ZAP Scan 指示代理披露漏洞 - 我们如何防止这种情况发生?
ASP.Net MVC 5 Sending Email 错误:根据验证程序,远程证书无效