netstandard 和 dotnet core 的分离

Separation of netstandard and dotnet core

我们的组织使用 dotnet Core 2.2 SDK 构建了一个 .Net 标准 2.0 dll。该库使用 Microsoft.Extensions.Options.ConfigurationExtensions ,它需要与 SDK 相同的版本。该库编译正常,所以我们有一个 netstandard 2.0 库,对吗?

我们的组织后来意识到 dotnet Core 2.2 现在不再受支持,但没有时间立即返回并修复所有库以将它们移回 dotnet Core 支持的版本 2.1。它们是 netstandard 2.0,所以没问题吧?

我们现在正在构建一个新的 asp.net 项目,该项目基于受支持的 asp.net Core 2.1,当尝试使用该库时,我们发现由于问题我们必须升级到 2.2与编译。我在这里错过了什么吗? netstandard dll 不应该独立于用于创建它的底层 SDK 吗?

根据@mason 和@LexLi 的建议,我想我已经找到了自己的答案,更深入地研究了错误。

NU1107: Version conflict detected for Microsoft.Extensions.Configuration.
Install/reference Microsoft.Extensions.Configuration 2.2.0 directly to project MyAspNet to
resolve this issue. 
MyAspNet -> MyNetStandard 1.5.4 ->
  Microsoft.Extensions.Options.ConfigurationExtensions 2.2.0 ->
  Microsoft.Extensions.Configuration.Binder 2.2.0 ->
  Microsoft.Extensions.Configuration (>= 2.2.0) 
MyAspNet -> Microsoft.AspNetCore.App 2.1.1 ->
  Microsoft.Extensions.Configuration (>= 2.1.1 && < 2.2.0).

问题确实与 .Net 标准或 SDK 无关。真正的问题在于 Microsoft.Extensions.Configuration (>=2.1.1 && <2.2.0) 的 ASP.Net 核心 2.1 依赖约束。通过引用以下库解决版本冲突确实允许应用程序编译。但此解决方案依赖于 .Net Core 2.2.0 DLL,它可能会或可能不会工作或受 ASP.Net 2.1.

支持
Microsoft.Extensions.Options.ConfigurationExtensions = 2.20
Microsoft.Extensions.DependencyInjection.Abstractions = 2.20
Microsoft.Extensions.Configuration.Binder = 2.20
Microsoft.Extensions.Configuration = 2.20
Microsoft.Extensions.Configuration.Abstractions = 2.20
Microsoft.Extensions.Primitives = 2.20

考虑到 .Net Core 3.1 已经发布了很短的时间,而且看起来各种库仍然需要更新(例如 Microsoft.Extensions.Options.ConfigurationExtensions 最新版本是 3.0),这可能不是一个好的选择这次。选项仍然是要么使用 ASP.Net 2.2 掷骰子,现在不支持,要么将私有库移回具有 .Net Core 2.1 依赖项。