.NET Framework、.NET Standard、.NET Core 和 .NET 5 之间的区别

Difference between .NET Framework, .NET Standard, .NET Core and .NET 5

我构建了一个 C# 应用程序,我的目标框架是 .NET Framework 4.72。虽然我使用了 TDengine C# connector,它的目标框架是 .NET Standard 2.1 和 .NET 5。

虽然我在项目中引用了这些包,但是构建时总是报错,说方法marshal。

Marshal.StringToCoTaskMemUTF8(String)

不在 Framework 4.7.2 中。

我很困惑,因为在我看来 4.7.2 应该是低于 .NET 5 的版本。而且这应该是兼容的。

那么 .NET Standard 与 .NET Framework .NET 5、6、7 之间有什么区别。这些名称总是让我感到困惑。有谁知道如何区分它们或推荐一些文章来帮助我了解它们。

确实比较费解,最近自己也在摸索。这是我想出的:

.NET and .NET Core are successors of .NET Framework.

从第 5 版开始,.NET Core 仅称为 .NET:

  • .NET 核心 1.0
  • .NET 核心 1.1
  • .NET 核心 2.0
  • .NET 核心 2.1
  • .NET 核心 2.2
  • .NET 核心 3.0
  • .NET 核心 3.1
  • .NET 5
  • .NET 6
  • .NET 7
  • .NET 8

.NET Framework从1.0版本运行到4.8,版本号无法分别与.NET Core或.NET进行比较。

.NET Standard 本身不是框架或平台。它只是将 .NET 实现的规范(标准)设置为“.NET 标准兼容”。 Here 您可以看到不同 .NET Standard 版本及其支持的 .NET 实现和版本的列表。

是的,这很令人困惑!

.NET Core 是对 .NET Framework 的重写,以使其成为 platform-independent。它与经典的 .NET Framework(.NET 4.8 版之前)有许多不兼容之处。 .NET 版本 5 及以后的新版本基于 Core 分支,因此直到 4.8 才与旧版本完全兼容。

.NET Standard 试图创建一个兼容所有版本的通用子集。因此,如果您针对 .NET Standard 进行编程,您的代码将同时适用于 4.8 分支和核心分支。不幸的是,MS 通过制作一个 与 .NET 4.8 兼容的 .NET Standard 版本来搞砸了。他们这样做可能是出于对 .NET 开发人员的恶意。

.NET 框架的主要版本:

.NET Framework 1.0 -> .NET Framework 2.0 -> .NET Framework 3.0 -> .NET Framework 3.5 -> .NET Framework 4.0 -> .NET Framework 4.8

主要的 .NET Core 版本:

.NET 核心 1 -> .NET 核心 2 -> .NET 核心 3 -> .NET 5 -> .NET 6