Bob*_*les 5 command-line-interface nuget nuget-package nuget-cli
我正在寻找一种方法来恢复 NuGet 包的程序集,该包正好针对一个框架,在本例中为net45。
这是我的包配置:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.1" targetFramework="net45" />
</packages>
Run Code Online (Sandbox Code Playgroud)
这是我的 NuGet 配置文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value=".\Nuget" />
</config>
</configuration>
Run Code Online (Sandbox Code Playgroud)
版本是: 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
Run Code Online (Sandbox Code Playgroud)
当 NuGet 安装具有多个程序集版本的包时,它会尝试将程序集的框架名称与项目的目标框架进行匹配。
如果未找到匹配项,NuGet 将复制小于或等于项目目标框架的最高版本的程序集(如果可用)。如果未找到兼容的程序集,NuGet 将返回相应的错误消息。
例如,请考虑包中的以下文件夹结构:
Run Code Online (Sandbox Code Playgroud)\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?
Gui*_*tin -3
尝试将您的 targetFramework 更改为
targetFramework="net45"
Run Code Online (Sandbox Code Playgroud)
到
targetFramework="4.5"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1055 次 |
| 最近记录: |