.NET Core 和 ASP.NET Core 之间到底有什么区别?
它们是相互排斥的吗?我听说 ASP.NET Core 是基于 .NET Core 构建的,但它也可以构建在完整的 .NET 框架上。
那么 ASP.NET Core 到底是什么?
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。
使用 .NET Core 的 ASP.NET Core - 所有依赖项都是自包含的,可以使用大多数 NuGet 包,不能使用 Windows 特定的包,可以在 Windows、Linux 和 Mac 上执行。
使用 .NET Framework 的 ASP.NET Core - 大多数依赖项都是自包含的,仅在 Windows 上执行,可以访问特定于 Windows 的 NuGet 包,需要在机器上安装目标的 .NET 框架版本。
ASP.NET Core 是 .NET Core 支持的工作负载之一。
来自 .NET Core guide:
.NET Core 本身包括一个单一的应用程序模型——控制台应用程序——它对工具、本地服务和基于文本的游戏很有用。在 .NET Core 之上构建了其他应用程序模型以扩展其功能,例如: ASP.NET Core Windows 10 通用 Windows 平台 (UWP) Xamarin.Forms
.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.
.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
我想补充一点,在 .NET Core 请求管道中有一种叫做中间件注入的东西。如果实现正确,这将非常有用,因为它可以自动拦截应用程序异常并使日志记录变得更加容易(在一个地方而不是在每个方法中都记录)。