ChatGPT解决这个技术问题 Extra ChatGPT

.NET 核心与 ASP.NET 核心

.NET Core 和 ASP.NET Core 之间到底有什么区别?

它们是相互排斥的吗?我听说 ASP.NET Core 是基于 .NET Core 构建的,但它也可以构建在完整的 .NET 框架上。

那么 ASP.NET Core 到底是什么?


M
Martin Ullrich

2020 年更新:请注意,ASP.NET Core 3 及更高版本现在依赖于 .NET Core,不能再在 .NET Framework 上使用。以下描述适用于 ASP.NET Core 1.x-2.x;层分离仍然适用于 ASP.NET Core 3.0,但 ASP.NET Core 层不能再在 3.0+ 中的 .NET Framework 之上使用。

.NET Core 是一个运行时。它可以执行为其构建的应用程序。

ASP.NET Core 是构成用于构建 Web 应用程序的框架的库的集合。 ASP.NET Core 库可用于 .NET Core 和“完整的 .NET Framework”(多年来随 Windows 一起提供)。

令人困惑的是,使用 ASP.NET Core 的库和工具的应用程序通常被称为“ASP.NET Core 应用程序”,理论上并没有说明它是为 .NET Core 还是为 .NET Framework 构建的。因此,“ASP.NET Core 应用程序”也是“.NET Core 应用程序”或“.NET Framework 应用程序”。

https://i.stack.imgur.com/3amI1.png

在这里,您可以看到 ASP.NET Core 构建在 .NET Framework 和 .NET Core 的“之上”,而“ASP.NET”(现在通常称为“经典 ASP.NET”)仅是 .NET Framework。


那么什么叫经典 ASP? “古代ASP”? :p
@DanSchnau,我们有“Classic ASP”、“ASP.NET”AKA“Classic ASP.NET”和“ASP.NET Core”,所以完全没有冲突:)
@MartinUllrich:我们不能在云上部署.net 但.net Core 可以在云上部署,这是真的吗?
取决于“云”对您意味着什么。例如,Azure AppService 可以托管 10 年前构建的经典 .NET Framework Web 应用程序。创建用于云托管 kubernetes 的基于 linux 的 docker 映像将需要 .NET Core。
但是工作人员服务直接是 .net 核心而不是 ASP 网络核心,对吗?我经常对我能否在 asp net core 而不是 .net core 上有一个工作服务应用程序感到困惑?
P
Peter Mortensen

使用 .NET Core 的 ASP.NET Core - 所有依赖项都是自包含的,可以使用大多数 NuGet 包,不能使用 Windows 特定的包,可以在 Windows、Linux 和 Mac 上执行。

使用 .NET Framework 的 ASP.NET Core - 大多数依赖项都是自包含的,仅在 Windows 上执行,可以访问特定于 Windows 的 NuGet 包,需要在机器上安装目标的 .NET 框架版本。


谁给这些东西起名字?这非常令人困惑。
@尼克:微软营销。他们在这方面有着悠久的历史。他们还没有发现网络——对产品使用常用名词(在搜索引擎世界中不好,因为更具体的不太常用的词更好,最好是字典中没有的唯一词)。
有点过时但相关:请注意,.NET 5.0 是 .NET Core 3.1 的后续版本,而不是 .NET Framework 4.0,“以避免混淆”[docs.microsoft.com/en-us/dotnet/core/dotnet-five]
P
Peter Mortensen

ASP.NET Core 是 .NET Core 支持的工作负载之一。

来自 .NET Core guide

.NET Core 本身包括一个单一的应用程序模型——控制台应用程序——它对工具、本地服务和基于文本的游戏很有用。在 .NET Core 之上构建了其他应用程序模型以扩展其功能,例如: ASP.NET Core Windows 10 通用 Windows 平台 (UWP) Xamarin.Forms


这对我来说是一个更相关的答案。 .Net Core 用于控制台应用程序,ASP.Net Core 用于 Web 应用程序。
S
Sinan Bozkuş

.NET Framework 是最后一个版本。 4.8以后不会再有了。 Microsoft 将继续使用 .NET Core。从此时起,您应该更喜欢在您的项目中使用 .NET Core。

更新(官方):

.NET 5 是 .NET Core 3.1 之后的下一个主要版本。我们将此新版本命名为 .NET 5 而不是 .NET Core 4,原因有两个:

我们跳过版本号 4.x 以避免与 .NET Framework 4.x 混淆。我们从名称中删除了“Core”,以强调这是 .NET 未来的主要实现。 .NET 5 支持比 .NET Core 或 .NET Framework 更多类型的应用程序和更多平台。 ASP.NET Core 5.0 基于 .NET 5,但保留名称“Core”以避免与 ASP.NET MVC 5 混淆。同样,Entity Framework Core 5.0 保留名称“Core”以避免与 Entity Framework 5 和6.


D
Dina Bogdan

.NET Core 是 .NET Framework 的下一个演变,它允许 Microsoft 技术托管在其他操作系统平台上,而不是 Windows。

ASP.NET 是 Microsoft 提供的用于构建的 Web 框架:

服务器端呈现的网页/网站

SPA 的服务器端组件

MVC 时尚应用

Web 服务/Web API/微服务

ASP.NET 仅在 Windows 平台上运行。

由于创建 .NET Core 是为了提供在 Linux/macOS 之上运行 Microsoft 技术的能力,这意味着 ASP.NET Core 是 ASP.NET 在多平台支持方向上的演变。

综上所述:

ASP.NET Core 在 .NET Core 和 .NET 5.0 上运行,在多个操作系统平台之上:Windows、Linux 和 macOS。

ASP.NET 4.x (ASP.NET/ASP.NET MVC) 仅在 Windows 操作系统之上的 .NET Framework 上运行。

https://i.stack.imgur.com/9ccUx.png


P
Pang

我想补充一点,在 .NET Core 请求管道中有一种叫做中间件注入的东西。如果实现正确,这将非常有用,因为它可以自动拦截应用程序异常并使日志记录变得更加容易(在一个地方而不是在每个方法中都记录)。


您可以在答案中添加一个或多个参考/链接吗?