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

.net 如何从Nuget包中选择目标框架,.net,visual-studio,nuget,.net-standard,package-managers,.net,Visual Studio,Nuget,.net Standard,Package Managers,我使用的是一个NuGet包,其中包含两个目标框架的程序集:net45和netstandard1.5 我的项目的目标是net471(因此与netstandard1.5兼容)。当我添加包时,它会从net45文件夹复制dll。如何强制NuGet使用标准文件夹中的dll net45版本的问题在于它需要一个旧版本的依赖项包,标准dll没有依赖项 如何从Nuget包中选择目标框架 根据官方文件: 当NuGet安装具有多个程序集版本的包时,它 尝试将程序集的框架名称与目标匹配 项目框架 因此,正如Matt所说

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

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

net45版本的问题在于它需要一个旧版本的依赖项包,标准dll没有依赖项

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

根据官方文件:

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

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

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


希望这有帮助。

将项目目标更改为netstandard1.5?无法将我的项目目标更改为netstandard。NuGet不支持WPF应用程序。NuGet将使用最匹配的程序集。更具体的目标框架获胜。因此,在本例中,您的项目以.NETFramework为目标,因此NuGet使用NuGet包中的.NETFramework程序集。您需要在项目中自己直接引用.NET标准程序集。您应该与包所有者讨论原因。我有一些公开的NuGet软件包,比如它的多个目标平台,比如
net45
netstandard13
,它们的行为是不同的(因此用户不能互换使用程序集)。这是System.Net.Http的一个大问题。对于在以.NET 4.6.1为目标的项目下安装的支持netstandard1.3和netstandard2.0的NuGet软件包,它总是选择netstandard2.0项目,这是非常糟糕的,因为.NET 4.6.1在寻找由于使用netstandard2.0而不存在的System.NET.Http版本时会爆炸并消亡。因此,我需要在一个以.NET4.6.1为目标的项目中显式地将NuGet包设置为以netstandard1.3(而不是netstandard2.0)为目标。我必须手动将项目引用更改为1.3 DLL吗?