【问题标题】:How to choose target framework from Nuget package如何从 Nuget 包中选择目标框架
【发布时间】:2018-09-10 21:56:30
【问题描述】:

我正在使用一个 NuGet 包,其中包含 2 个目标框架的程序集:net45 和 netstandard1.5

我的项目是针对 net471(与 netstandard1.5 兼容)。当我添加包时,它会从 net45 文件夹中复制 dll。如何强制 NuGet 使用标准文件夹中的 dll?

net45版本的问题是需要老版本的依赖包,标准dll没有依赖。

【问题讨论】:

  • 把你项目的目标改成netstandard1.5?
  • 无法将我的项目目标更改为 netstandard。 WPF 应用程序
  • NuGet 不支持此功能。 NuGet 将使用最接近匹配的程序集。更具体的目标框架获胜。因此,在这种情况下,您的项目以 .NETFramework 为目标,因此 NuGet 使用 NuGet 包中的 .NETFramework 程序集。您需要自己在项目中直接引用 .NET Standard 程序集。
  • 您应该与包所有者讨论以了解原因。我有一些公共 NuGet 包,如 #SNMP 及其多个目标平台,如 net45netstandard13,行为不同(因此用户不能互换使用程序集)。
  • 这是 System.Net.Http 的一个大问题。对于一个支持netstandard1.3和netstandard2.0的NuGet包,安装在一个面向.NET 4.6.1的项目下,它总是选择netstandard2.0项目,这很糟糕,因为.NET 4.6.1爆炸死了由于使用netstandard2.0,不存在的System.Net.Http版本。因此,我需要在一个以 .NET 4.6.1 为目标的项目中明确地将 NuGet 包设置为以 netstandard1.3(而不是 netstandard2.0)为目标,以实现这项工作。我必须手动更改对 1.3 DLL 的项目引用吗?

标签: .net visual-studio nuget .net-standard package-managers


【解决方案1】:

如何从 Nuget 包中选择目标框架

根据官方文档Matching assembly versions and the target framework in a project

当 NuGet 安装具有多个程序集版本的包时,它 尝试将程序集的框架名称与目标匹配 项目框架。

因此,正如 Matt 所说:“NuGet 将使用最匹配的程序集。更具体的目标框架获胜。”,NuGet 会将 .net 框架程序集安装到您的 .net 框架项目。

要解决此问题,您可以使用 Matt 建议,直接在项目中自己引用 .NET Standard 程序集 或者您可以手动下载该 nuget 包,将其设置为 local feed,打开使用 NuGet 包资源管理器,删除 lib 文件夹下的文件夹 net45,从本地提要安装该包,然后 nuget 将使用标准文件夹中的 dll。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    相关资源
    最近更新 更多