.NET Standard 版本控制规则是什么?

What are the .NET Standard versioning rules?

.NET Standard 规定了所有 .NET 平台必须实现的 API。它的版本控制规则是什么?它是 breaking.adding,其中 1.4 添加到 1.3 并保持向后兼容,而 2.x 不向后兼容 1.x

文档对此并不清楚。 Some Microsoft docs 表示纯向后兼容性:

Given a .NET Standard Library version, you can use libraries that target that same or lower version. (emphasis added)

现在2.0出来了,以上好像都不对。话虽这么说,the release blog post 说:

From a library targeting .NET Standard you’ll be able to reference [libraries targeting] .NET Standard, if their version is lower or equal to the version you’re targeting. (emphasis added)

同一个博客 post 自相矛盾地说:

In order to allow .NET Framework 4.6.1 to support .NET Standard 2.0, we had to remove all the APIs from .NET Standard that were introduced in .NET Standard 1.5 and 1.6.

现在2.0出来了,版本控制规则是什么?它似乎是 breaking.adding。 MSFT 在哪里记录了这一点?

我在我们的 On.NET episode on .NET Standard.

中对此进行了更详细的解释

通常,.NET Standard 是这样工作的:

  1. .NET Standard 将线性版本化,目的是不在版本之间进行重大更改。换句话说,您可以将 .NET Standard 的 API 表面视为同心圆,其中更高版本具有更多 API。
  2. 特定版本的 .NET 平台将实现特定版本的 .NET Standard。
  3. 选择 .NET Standard 版本作为目标时,请考虑以下权衡:
    • 版本号越高,可以使用的API越多
    • 版本号越低,支持的.NET平台越多

那么为什么要讨论重大更改呢?简短的回答是因为我们在定义 .NET Standard 1.x 时犯了一个错误,没有考虑到平台范围。您应该忽略 .NET Standard 1.5 和 1.6 并避免依赖它们。如果这样做,.NET Standard 2.0 就是 .NET Standard 1.4 的严格超集。

有关更多详细信息,请阅读 .NET Standard 2.0 重大更改:添加 .NET Framework 4.6.1 兼容性 部分 my blog post on .NET Standard

更新。在收到大量社区反馈后,我们决定不执行此重大更改。 .NET Standard FAQ.

中列出了有关此决定的更多详细信息