介绍
在本文中,我们将探讨 .NET Framework、.NET Core 和 .NET Standard 之间的区别。
.NET 框架与 .NET Core
.NET 框架 | .NET 核心 | |
历史 | .NET Framework 是 .NET 的第一个实现。 | .NET Core 是 .NET 的最新实现。 |
开源 | .NET Framework 的某些组件是开源的。 | .NET Core 是开源的。 |
跨平台 | 它仅适用于 Windows 平台。这不支持跨平台部署。 | 它可以跨平台运行,如 Windows、Linux 和 macOS。 |
第三方包支持 | 有许多第三方包,库可用。 | .NET Core 还支持大量第三方包,但仍然无法与 .NET Framework 竞争。 |
应用内部署 | 它不支持应用内部署模型。 | 它确实支持应用内部署模型。 |
性能和可扩展性 | 与 .NET Core 相比,.NET Framework 在应用程序的性能和可扩展性方面效率较低。 | 与 .NET Framework 相比,.NET Core 提供了更高的性能和可扩展性。 |
微服务实施 | .NET Framework 不支持微服务的实现。 | .NET Core 支持微服务的实现 |
REST 服务实现 | 它支持 REST API 服务实现。 | 我们可以使用 .NET Core 创建一个 REST API。 |
命令行工具 | .NET Core 为所有受支持的平台提供轻量级编辑器和命令行工具。 | .NET Framework 对于命令行界面来说很重 |
何时使用 | 我们的应用程序仅在 Windows 平台上运行。我们的应用程序基于 WinForms 或 WPF 应用程序。ASP.NET Web 窗体创建。如果要创建 WCF 服务。我们的应用程序使用了一些 .NET Core 不支持的第三方包。该应用程序使用 .NET Core 不可用的 .NET 技术。如果您的应用程序想要访问 Windows 特定的 API,请选择 .NET Framework。 | 创建跨平台应用程序。要创建微服务,那么一定要使用 .NET Core。将应用程序部署到 Docker 容器。创建高性能和可扩展的应用程序。如果您同时运行多个 .NET 版本,则选择 .NET Core。如果您想要命令行界面 (CLI) 控件,那么 .NET 核心是最佳选择。 |
什么时候不使用 | 跨操作系统平台运行时是您的应用程序的一项要求。 如果你想实现微服务。需要最佳性能和可扩展性的 Web 应用程序 | .NET Core 中不存在 ASP.NET WebForms。如果要创建 WCF 服务。如果您的应用程序想要访问特定于 Windows 的 API。如果您的应用程序需要使用 Windows 注册表、WMI 或其他 Windows 特定 API,那么它将无法使用 .NET Core。 |
.NET 标准
假设我们使用 .NET Framework 创建了一个应用程序并使用了一些共享库(由 .NET Framework 开发)。一段时间后,我们决定在 .NET Core 中创建一个应用程序,并尝试重用上述相同的共享库。它兼容吗?我们可以使用它吗?答案是否定的。由于兼容性问题,我们无法在 .NET Core 应用程序中使用 .NET Framework 基类库。基本上,面向 .NET Framework 的库只能在基于 .NET Framework 的应用程序中运行,而面向 .NET Core 的库只能在与 .NET Core 兼容的应用程序中运行。
解决办法是什么?
解决方案是.NET Standard。.NET Standard 是与任何 .NET 平台(.NET Framework 或 .NET Core)兼容的 API 集规范。如果我们使用 .NET Standard 创建基类库,那么它将与任何 .NET 运行时一起运行。因此,如果您想创建一个稍后将被重用的共享库,那么您可以选择 .NET Standard,因为它也可以与 .NET Framework、.NET Core 和 Xamarin 一起移植。
每个 .NET Standard 版本都包含一些 API 集,例如 System.Data、System.Collections 等。如果引入了新版本的 .NET Standard,那么它将包含所有先前版本的 API 集以及一些新 API。更高版本的 .NET Standard 意味着可用的 API 更多。
.NET 标准是,
- 它不是像 .NET Framework 或 .NET Core 这样的框架。
- 这是所有 .NET 实现必须实现的一组基本 API
- 用于代码共享和不同运行时之间的代码重用。
- 与任何 .NET 应用程序兼容。
.NET Standard 支持广泛的框架,如下表所列。
https://docs.microsoft.com/en-us/dotnet/standard/net-standard
.NET Standard | 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 2.0 | 2.1 |
.NET | 5.0 | 5.0 | 5.0 | 5.0 | 5.0 | 5.0 | 5.0 | 5.0 | 5.0 |
.NET Core | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 | 3.0 |
.NET Framework 1 | 4.5 | 4.5 | 4.5.1 | 4.6 | 4.6.1 | 4.6.1 2 | 4.6.1 2 | 4.6.1 2 | 不适用3 |
Mono | 4.6 | 4.6 | 4.6 | 4.6 | 4.6 | 4.6 | 4.6 | 5.4 | 6.4 |
Xamarin.iOS | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.14 | 12.16 |
Xamarin.Mac | 3.0 | 3.0 | 3.0 | 3.0 | 3.0 | 3.0 | 3.0 | 3.8 | 5.16 |
Xamarin.Android | 7.0 | 7.0 | 7.0 | 7.0 | 7.0 | 7.0 | 7.0 | 8.0 | 10.0 |
通用 Windows 平台 | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.0.16299 | 10.0.16299 | 10.0.16299 | 待定 |
统一 | 2018.1 | 2018.1 | 2018.1 | 2018.1 | 2018.1 | 2018.1 | 2018.1 | 2018.1 | 2021.2.0b6 |
概括
- .NET Framework 主要用于基于 Windows 的应用程序开发,与 .NET Core 相比效率较低。
- .NET Core 是开源的,用于开发跨平台应用程序和微服务。
- .NET Standard 用于创建可在任何 .NET 平台中重复使用的共享库。
我希望你喜欢这个并且现在知道 .NET Framework、.NET Core 和 .NET Standard 之间的区别。
.NET Core 和 .NET Standard:有什么区别?
微软发布了.NET Core 2.0,但开发人员之间仍然存在混淆.NET Core、.NET Standard、Xamarin 和 .NET Framework 之间的区别
.NET Framework 用于构建在 Internet Information Server (IIS) 上运行的桌面应用程序和 ASP.NET 应用程序。这是第一个发布的托管框架。
Xamarin 是用于构建 iOS、Android 和 macOS 桌面应用程序的托管框架。
.NET 核心
.NET Core是托管框架的免费、跨平台、开源实现。它支持四种类型的应用程序:控制台、ASP.NET Core、云和通用 Windows 平台(UWP)。Windows 窗体和Windows Presentation Foundation (WPF) 不是 .NET Core 的一部分。
从技术上讲,.NET Core 仅支持控制台应用程序。ASP.NET Core 和 UWP 是构建在 .NET Core 之上的应用程序模型。
与 .NET Framework 不同,.NET Core 不被视为 Windows 组件。因此,更新以 NuGet 包的形式提供,而不是通过 Windows 更新。由于 .NET Core 运行时是 App-Local 安装的,并且应用程序是通过包管理器更新的,因此应用程序可以与特定的 .NET Core 版本相关联并单独更新。
.NET 标准
托管框架的每个实现都有自己的一组基类库。基类库 (BCL) 包含异常处理、字符串、XML、I/O、网络和集合等类。
.NET Standard是实现 BCL 的规范。由于 .NET 实现需要遵循此标准,因此应用程序开发人员不必担心每个托管框架实现的 BCL 版本不同。
WPF、WCF 和 ASP.NET 等框架类库 (FCL) 不是 BCL 的一部分,因此不包含在 .NET Standard 中。
.NET Standard 与 .NET 实现之间的关系与 HTML 规范与浏览器之间的关系相同。第二个是第一个的实现。
因此,.NET Framework、Xamarin 和 .NET Core 各自在其托管框架中为 BCL 实现 .NET Standard。由于计算机行业将继续引入新的硬件和操作系统,因此将会有新的 .NET 托管框架。该标准允许应用程序开发人员知道他们可以依赖一组一致的 API。
每个 .NET 版本都有一个关联的 .NET Standard 版本。
通过提供一致的 API,将应用程序移植到不同的托管实现以及提供工具变得更加容易。
.NET Standard 被定义为单个 NuGet 包,因为所有 .NET 实现都需要支持它。工具变得更容易,因为这些工具具有一组一致的 API 可用于给定版本。您还可以为多个 .NET 实现构建单个库项目。
您还可以为特定于平台的 API 构建 .NET Standard 包装器。
.NET 标准与可移植类库
可移植类库没有做同样的事情吗?
可移植类使用平台支持的通用 API 的联合。因此,您支持的平台越多,可用的 API 就越少。然后很难理解给定平台组合实际支持哪些 API。对于新平台,必须重新编译现有的 PCL。PCL 还要求微软为每个平台创建一个新的框架实现分支。
由于 .NET Standard 修复了 API,而不是实现,因此无需重新编译应用程序。任何新发布的 .NET 实现都会实现所需的库。应用程序可以针对新的硬件平台或操作系统而无需重新编译。理论上,您可以通过调用 API 获得 NotSupportedException,但这应该很少见。
结论
.NET Standard 是一种 API 规范,它为给定版本定义了必须实现的基类库。
.NET Core 是一个托管框架,针对构建控制台、云、ASP.NET Core 和 UWP 应用程序进行了优化。它为基类库提供了 .NET Standard 的实现。