ChatGPT解决这个技术问题 Extra ChatGPT

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

我一直在低头从事各种项目,显然微软一直在忙于做出一些重大改变,这让我很困惑。当我去年安装 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,它说它不再被维护了?

我了解有关 Core 的 this much 并说:“好吧,我为什么要关心?我将继续做我正在做的事情,并在完成后检查它。”但是现在似乎不再支持 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 框架上运行。
谢谢@MarcGravell。我一直在读到核心缺少某些功能并且不适用于某些东西,因为它正在从头开始重建,但尚未完成,但没有人具体说明这些东西是什么。是下一个 .Net 版本还是框架分为两个?我不愿意采用核心,然后发现它不支持过去版本中可用的某些重要功能。
@MarcGravell“你应该计划迁移到 .NET Core”——如果桌面应用程序必须迁移到 DNX,我会非常不舒服:我的用户不需要为我的每个相对较小的应用程序包增加 20MB 的运行时和依赖项。那么核心运行时的安全更新呢?由于 DNX 应用程序是孤立的并且存在于它们自己的孤岛中,因此不可能像使用 .NET Framework 那样一次性更新共享组件。 DNX 仅真正适用于可以从源代码轻松重建的服务器应用程序,而不是面向最终用户的桌面应用程序。
@Dai .NET Core 有一个独立的部署选项(目前是实验性的),但您不需要使用它。不过,以这种方式部署到客户端可能更容易,这是同意的——这可能会让客户端应用程序很有吸引力。也就是说:.NET 核心的发展速度比 .NET 框架快得多;如果说您可能会更快地获得 .NET 核心的修复。但是,是的,那么问题是:是否部署了该修复程序?

D
Dai

(每当发布新的 .NET 公告时,此答案都会定期更新,并且已更新 ASP.NET Core 3.0、.NET 3 和 .NET 5 的详细信息)

对于过去 3 年和 5 年在 .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 Core)。您链接到 ASP.NET MVC 5 的文档 - 这与 ASP.NET 5 不同。

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 作为 ASP.NET MVC 4 的更新于 2014 年推出。它与 ASP.NET 5 无关。我确实注意到 ASP.NET MVC 5 是我们同时拥有 System.Web.Mvc 和 Microsoft 的地方。 Web.Mvc 命名空间——这令人困惑。幸运的是,这在今天是短暂的,无关紧要。

我确实注意到 ASP.NET MVC 5 是我们同时拥有 System.Web.Mvc 和 Microsoft.Web.Mvc 命名空间的地方——这令人困惑。幸运的是,这在今天是短暂的,无关紧要。

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 MVC 和 ASP.NET WebAPI 升级到 ASP.NET Core 并非易事,尽管它们的控制器和中间件的基本架构是相同的。

请注意,ASP.NET Core 的类库的根命名空间现在是 Microsoft.AspNet 而不是 System.Web。这对我来说是一个困惑的根源。这意味着将项目从 ASP.NET MVC 和 ASP.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 的替代品,用于新的应用程序开发。

与 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 5 将成为 .NET Core 3 发布后的新名称(.NET 5 预计在 2020 年末左右)。 .NET 5 与 ASP.NET 5.0 或 ASP.NET MVC 5 完全无关。没有 .NET Core 4 或 .NET Framework 5.0。

.NET 5 与 ASP.NET 5.0 或 ASP.NET MVC 5 完全无关。

没有 .NET Core 4 也没有 .NET Framework 5.0。

“.NET 中的 ASP.NET Core”似乎是专门针对 .NET 5 及更高版本的 ASP.NET Core 第一个版本的最终名称。

我注意到“Core”是微软为与 .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 1ASP.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 为主题的夏天,微软最终确定了 .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 之上(即 . NET 4.x 版本的 System.Web.dll)。请注意,整个 ASP.NET MVC 库现已过时。

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 的主要重启。主要更改包括合并 MVC、Web Pages 和 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 - 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。

.NET 5 - 2019 年 5 月:微软宣布 .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 5 的即将发布,Microsoft 已将 ASP.NET Core 的 NuGet 包的版本号提高到 5.0.0。微软尚未正式/正式将这个新版本的 ASP.NET Core 称为“ASP.NET Core 5”,但我认为这是已成定局。

适用于 .NET 5 的 ASP.NET Core 2020 年 9 月的一篇更新的博客文章表明,微软将 ASP.NET Core 的下一个版本称为“适用于 .NET 5 的 ASP.NET Core”(是的,这是拗口 - 至少它不像以前的名字那样模棱两可)。更新(2021 年 9 月):似乎正式名称现在是 .NET 5 中的 ASP.NET Core,而对于 .NET 6,它们似乎也与 .NET 6 中的 ASP.NET Core 一起消失了。

更新(2021 年 9 月):似乎正式名称现在是 .NET 5 中的 ASP.NET Core,而对于 .NET 6,它们似乎也与 .NET 6 中的 ASP.NET Core 一起消失了。

时间线和框图

(我做这个被冲昏了头脑……)

https://i.stack.imgur.com/MEeBc.png


微软确实需要一记耳光。作为刚接触 ASP.NET 世界的新人,涉足非常相似(但又非常不同)的技术是一项艰巨的任务。澄清这个烂摊子的好答案。
红框中图表的底部 RHS... :)
ASP.NET 又名“System.Web”现在已经死了。 WebForms 已经死了(欢呼!),为什么很多人讨厌这种在当时甚至现在都很棒的技术。在一个免费包中提供 Web 开发所需的一切。
@mz1378 WebForms 有大量的设计缺陷清单,使其与现代网络和可用性不兼容,我不会深入探讨;但是,即“回发”模型打破了 HTTP 的 RESTful 语义。 Viewstate 永远不会正常工作,并且气球会请求大小。 “页面”本质上违反了松散耦合。而且整个平台不可能进行单元测试或在集成测试中使用。
还应该有一个 Microsoft 认证,以了解 Microsoft 所做的如此多的更改。
L
Lex Li

此答案将尝试仅关注 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 的支持)。

如果您确实查看了有关产品生命周期的 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。


c
carloswm85

我发现 Wikipedia 中对 this article 的介绍中的这个片段是对此处提供的出色答案 the selected answer 的一个很好的总结。这篇 Microsoft 的博文也是如此: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 目前计划合并到“.NET 5”中。