我正在寻找一种方法来恢复 NuGet 包的程序集,该包正好针对一个框架,在本例中为 net45。
这是我的包配置:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.1" targetFramework="net45" />
</packages>
这是我的 NuGet 配置文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value=".\Nuget" />
</config>
</configuration>
版本是:NuGet Version: 5.2.0.6090
运行:nuget restore packages.config -ConfigFile nuget.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
当 NuGet 安装具有多个程序集版本的包时,它会尝试将程序集的框架名称与项目的目标框架匹配。
如果未找到匹配项,NuGet 会复制小于或等于项目目标框架的最高版本的程序集(如果可用)。如果未找到兼容的程序集,NuGet 将返回相应的错误消息。
例如,考虑一个包中的以下文件夹结构:
\net45 \MyAssembly.dll \net461 \MyAssembly.dll
在面向 .NET Framework 4.6 的项目中安装此包时,NuGet 将程序集安装在 net45 文件夹中,因为这是小于或等于 4.6 的最高可用版本。
另一方面,如果项目以 .NET Framework 4.6.1 为目标,NuGet 会将程序集安装在 net461 文件夹中。
从上面的段落我了解到,当我设置目标框架时,我应该能够只恢复那个目标框架的程序集。在我的情况下,NuGet 似乎完全忽略了该targetFramework
属性,并始终为所有目标框架安装 dll。将其从net45更改为net40无效。
如何让 NuGet仅还原特定目标框架的包中的 dll?