如何仅从特定目标框架的NuGet包还原程序集

如何仅从特定目标框架的NuGet包还原程序集,nuget,command-line-interface,nuget-package,nuget-cli,Nuget,Command Line Interface,Nuget Package,Nuget Cli,我正在寻找一种方法来恢复NuGet包的程序集,该包的目标正好是一个框架,在本例中是net45 这是我的软件包配置: 这是我的NuGet配置文件: 版本为:NuGet版本:5.2.0.6090 运行:numget restore packages.config-ConfigFile numget.config还原所有targetframework版本的程序集,如下所示: E:\Tmp\NuGet\Nuget\Newtonsoft.Json.12.0.1>dir lib Direct

我正在寻找一种方法来恢复NuGet包的程序集,该包的目标正好是一个框架,在本例中是net45

这是我的软件包配置:


这是我的NuGet配置文件:


版本为:
NuGet版本:5.2.0.6090

运行:
numget restore packages.config-ConfigFile numget.config
还原所有
targetframework
版本的程序集,如下所示:

E:\Tmp\NuGet\Nuget\Newtonsoft.Json.12.0.1>dir lib
 Directory of E:\Tmp\NuGet\Nuget\Newtonsoft.Json.12.0.1\lib

2019-09-30  18:27    <DIR>          .
2019-09-30  18:27    <DIR>          ..
2019-09-30  18:27    <DIR>          net20
2019-09-30  18:27    <DIR>          net35
2019-09-30  18:27    <DIR>          net40
2019-09-30  18:27    <DIR>          net45
2019-09-30  18:27    <DIR>          netstandard1.0
2019-09-30  18:27    <DIR>          netstandard1.3
2019-09-30  18:27    <DIR>          netstandard2.0
2019-09-30  18:27    <DIR>          portable-net40+sl5+win8+wp8+wpa81
2019-09-30  18:27    <DIR>          portable-net45+win8+wp8+wpa81
在以.NET Framework为目标的项目中安装此包时 NuGet将程序集安装在net45文件夹中,因为这是低于或等于4.6的最高可用版本

另一方面,如果项目的目标是.NETFramework4.6.1,那么NuGet 在net461文件夹中安装程序集

从上面的段落中,我了解到,当我设置目标框架时,我应该能够仅恢复该目标框架的程序集。在我的例子中,NuGet似乎完全忽略了
targetFramework
属性,总是为所有目标框架安装DLL。将其从net45更改为net40没有效果


如何使NuGet restore仅对特定目标框架的包中的DLL进行还原?

尝试从

targetFramework="net45"

我想你做不到

nuget(zip)包含所有框架

Nuget.exe所做的一切就是下载并解压缩文件。 你可以删除那些你不想要的吗

另外,为什么不直接使用
\nuget.exe restore-Force-NoCache-Packagesdirectory。\nuget
而不是nuget配置文件呢


你可以通过创建自己的只包含框架的包来迷惑人们

为什么这对你很重要?你想要实现什么?如果您只需要与项目相关的程序集,那么在构建项目时,bin目录将包含所有组件,因为您的目标是.NET Framework TFM。对于.NET核心项目,您可以使用
dotnet publish
@zivkan。不幸的是,我将它与Unity一起使用,当Unity发现多个同名DLL时会抛出一个错误。问题是,根据MS文档,它应该可以工作,但它不是。感谢您的回答,但不幸的是,“4.5”不是一个有效的TFM,下面是我正在使用nuget.config文件的可能选项列表,因为它还包含一些内部自定义存储库。通过powershell删除我不需要的文档是我现在正在做的事情,但我正在寻找一种自动完成的方法,并基于我对它应该工作的文档的理解。另外,我知道这些包包含程序集的所有版本,但我不太明白目标frameworkFair关于配置的意义,我是基于您的示例。检查。它不是用来过滤它们,而是用来知道项目是否已经升级,因此引用是否旧。如果csproj与package.config不匹配,它会发出警告。如果Unity支持它,您也可以考虑使用新的CSPROJ格式。
targetFramework="net45"
targetFramework="4.5"