支持多个目标框架的 NuGet 包的优先顺序

Order of precedence for NuGet packages that support multiple target frameworks

我有一个支持多个目标框架 net45netstandard2.0 的 NuGet 包。目标框架的代码存在差异(条件编译)。

如果我从 .NET Framework 4.6.1 应用程序引用此包,它似乎选择了 net45 版本而不是 netstandard2.0 版本,尽管它名义上与这两个版本兼容。

决定这个选择的优先规则是什么?对于为更高版本的 .NET Framework(4.7.2、4.8、...)构建的应用程序,选择是否相同?

它将选择小于或等于您的应用目标框架的最高匹配目标框架,前提是该库具有这样的目标。

如果不存在,它将退回到网络标准目标(如果存在的话)。

否则,库不兼容。

有点令人沮丧的是文档没有对此进行更详细的说明,并且它们没有涵盖更复杂的场景(例如 net461 应用程序,引用 netstandard2.0 libA,进而引用多目标netstandard2.0,net461 libB - 为 libB 解析了哪个框架?)。对于那些你只需要尝试一下就可以看到。

查看文档,如实,here and here