构建“.Net Standard”项目时 - 这意味着什么?

When a ".Net Standard" project is built - what does that mean?

既然 .net 标准不是一个实现,它只是一组规则,当一个 .net 标准 Class-Library 项目被构建时会发生什么?

我认为只能构建 .net 框架或 .net 核心(等)项目(可以包括 .net 标准 class-库的 文件).然而,完全构建 .net 标准 class 库作为项目是可能的。

(只回答了一部分)

看看展开Dependencies节点时显示的内容:

.NET Standard 库最终选择一个实现,在本例中是 .NET Core。

现在为什么选择 .NET Core 而不是 .NET Framework?

我想是因为它与平台无关,因此符合 .NET Standard 的开放性范式,所以 .NET Framework 就不同了。

netstandard.dll 的目的是什么?

当您在您选择的反编译器中打开它时,您将看到数千个 TypeForwardedTo 属性,即它的作用是将 .NET Standard 类型转发给一个实现。

此外,有趣的是,它甚至不是由 Microsoft 而是由 Mono 开发团队编写的。

Microsoft Docs 定义 .NET 标准如下:

.NET Standard is a formal specification of .NET APIs that are intended to be available on all .NET implementations. The motivation behind .NET Standard is to establish greater uniformity in the .NET ecosystem. ECMA 335 continues to establish uniformity for .NET implementation behavior, and while ECMA 335 specifies a small set of standard libraries, the .NET Standard specification encompasses a broader range of .NET APIs.

完全有可能单独构建 .NET Standard 项目。但是,如何使用它实际上取决于您使用的版本。选择要使用的 .NET Standard 版本取决于您的用例。版本越高,可用的 API 越多,但这也意味着您可以针对的平台越少。

举一个非常简单的 .NET Standard 2.0 与 2.1 的例子。

比方说,您需要创建一个客户端库/Nuget 包供不同的应用程序使用。如果您选择 .NET Standard 2.0,您的库可以作为 .NET Core 2.0+ 和 .NET Framework 4.6.1+ 的目标(有一些注意事项)。

但是,如果您知道您只有 .NET Core 3.0 及更高版本的使用者,那么可以安全地选择 .NET Standard 2.1 作为您的目标并获得 .NET Standard 中可用的其他 API 和功能的优势2.1