5

我正在寻找一种方法来恢复 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

根据docs.microsoft.com

当 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?

4

2 回答 2

0

我不认为你可以。

提琴手

nuget (zip) 包含所有框架。

所做的只是下载文件并Nuget.exe解压缩它。以后不想要的可以删吗?

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

您可能会通过创建自己的仅包含您的框架的包来迷惑人们!

于 2019-10-09T12:51:06.573 回答
-2

Try to change your targetFramework from

targetFramework="net45"

to

targetFramework="4.5"
于 2019-10-03T20:34:48.873 回答