【问题标题】:Can .NET standard libraries somehow consume nuget packages, which support .NET Framework 4.6.1.NET 标准库能否以某种方式使用支持 .NET Framework 4.6.1 的 nuget 包
【发布时间】:2018-12-05 13:27:57
【问题描述】:

我正在将基于 C# net461 的库转换为 netstandard2。库的一些依赖最多支持net461。 Visual Studio 对这些依赖项显示以下警告:

警告 NU1701 包“IKVM v8.1.5717”是使用“.NETFramework,Version=v4.6.1”而不是项目目标框架“.NETStandard,Version=v2.0”恢复的。此软件包可能与您的项目不完全兼容。

是否可以合并这些依赖项并成功移植到 netstandard2?

我环顾四周并尝试了Microsoft.Windows.Compatibility nuget。将其作为进一步的依赖项添加到新的 netstandard2 库项目后,警告仍然存在,并且“bin/debug/netstadard2”处的构建输出不包含 nuget 依赖项的 dll。正如预期的那样,在尝试使用另一个项目的库时,我得到了 netstandard2 库的 net461 依赖项缺少 DLL 的运行时异常。

【问题讨论】:

  • 兼容包不够用吗?
  • 看看这个:stackoverflow.com/questions/42747977/…。您可以定位多个框架并将其分配给项目组。
  • 你不能总是做一个完整的端口,这就是警告的全部内容。该库可能依赖于原生 API,例如通过使用 WinForms。在这种情况下,该库将无法在其他平台(Linux、Mac 等)上运行,或者根本无法在任何平台上运行(我没有尝试过,文档也不是 100% 清楚)。

标签: c# .net .net-standard class-library .net-standard-2.0


【解决方案1】:

经过大量的实验和搜索,我发现问题有两个方面:

  1. net461 依赖项具有 netstandard 2.0 未涵盖的 API, 这会导致运行时错误。
  2. 作为传递依赖,net461 依赖的 DLL 在构建过程中不包括在内。

在我的例子中,问题 #1 通过包含 Windows 兼容性包得到解决,其中包括我的 net461 依赖项使用的额外 API。但是由于问题 #2,我仍然遇到运行时异常。

问题 #2 已通过确保所有导入使用 PackageReference 样式来解决,该样式会拉取传递依赖项。

【讨论】:

    猜你喜欢
    • 2023-01-24
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多