【问题标题】:When a ".Net Standard" project is built - what does that mean?构建“.Net Standard”项目时——这是什么意思?
【发布时间】:2020-06-10 20:03:28
【问题描述】:

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

我认为只能构建一个 .net 框架或 .net 核心(等)项目(其中可以包含一个 .net 标准类库的文件)。然而,完全可以将 .net 标准类库构建为一个项目。

【问题讨论】:

  • @JeremyCaney 非常不清楚您试图通过此评论阻止/建议什么...显然stackoverflow.com/questions/34906969/… ...因此 OP 不太可能询问输出是什么...但您似乎确切地知道它们是什么询问 - 愿意澄清吗?
  • @AlexeiLevenkov 我想我明白杰里米在说什么。由于 .NET Standard 不是一个实现,当您单独编译项目时,哪个库提供了 String.Replace 的实现(例如)。
  • @AngryHacker 这对于 .NET 中的任何其他编译有何不同 - 你几乎永远不知道哪个库将提供库中代码所指方法的实现......我想完全误解了你的评论。 ..(其中可能有一个有趣的问题,因为我不需要深入研究它在 IL 中的确切表示方式......)
  • 项目构建/编译只是针对一组引用的程序集,blog.lextudio.com/…,其中 .NET Standard 仅添加了一些程序集。那么你到底想学什么?
  • Project build/compilation is just against a set of referenced assemblies - 是的。哪个? .net 标准不应该“拥有”任何东西。

标签: c# .net .net-core .net-standard


【解决方案1】:

(只是部分答案)

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

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

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

我猜是因为它与平台无关,因此符合 .NET Standard 的开放性范式,而 .NET Framework 则不能这样说。

netstandard.dll 的用途是什么?

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

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

【讨论】:

  • 不错的收获!现在我想知道当我的解决方案与引用 .net 标准项目的 .net 框架项目构建时会发生什么。我猜框架只需要消耗核心。
  • 当你做这样的事情时,你会看到.NET Framework也有自己的netstandard.dll实现,它位于C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\netstandard.dll。我没有检查,但它可能会将所有内容转发到,您猜对了,.NET 框架本身。
【解决方案2】:

Microsoft Docs 定义 .NET Standard 如下:

.NET Standard 是 .NET API 的正式规范,旨在 可用于所有 .NET 实现。背后的动机 .NET 标准是为了在 .NET 中建立更大的统一性 生态系统。 ECMA 335 继续为 .NET 建立统一性 实现行为,而 ECMA 335 指定了一小组 标准库,.NET 标准规范包含一个 更广泛的 .NET API。

完全有可能单独构建一个 .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 2.1 中提供的其他 API 和功能的优势

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2011-09-04
    相关资源
    最近更新 更多