nuget.config会忽略依赖关系的依赖关系(子依赖关系)

时间:2019-03-04 08:14:58

标签: visual-studio nuget

我的项目有一个nuget.config,并指定了一个repositoryPath。我还指定了globalPackagesFolder。

<config>
<add key="globalPackagesFolder" value="c:\p" />
<add key="repositoryPath" value="c:\p" />
</config>

现在,我想在我的项目中安装第三方软件包。该软件包正确位于我指定的路径。

当我尝试安装另一个依赖于System.Net.Http并具有其他子依赖关系的软件包时,nuget无法安装此软件包,因为路径太长。

直接依赖关系位于nuget.config中指定的我的repositoryPath中。问题是,子依赖项不在此路径上。在该存储库中的文件搜索未找到匹配项。

我在nuget.config中指定了repositoryPath的唯一原因是我想将子依赖关系移动到另一个文件夹,因为否则路径太长并且nuget无法安装软件包。对于我的同事来说,这不是问题。

如何更改此行为?

如果这不可能,那么我的问题是否还有其他解决方案? 一位同事建议缩短我的Windows登录时间,但这不是解决方案。我也无法缩短我们的Teamcity用户登录名。

我尝试安装的软件包是由我公司开发的。因此,如果我必须更改程序包中的设置,这不是问题。

我尝试使用带有Nuget 4.6.0的Visual Studio 2017 Pro和Enterprise和带有Nuget 5.0.0的Visual Studio 2019 RC。 目标框架是.NET Core 2.1

当我将软件包System.Net.Http手动添加到我的项目中并安装该软件包时,没有问题,但是我宁愿不这样做,除非没有其他解决方案。

编辑: 为了澄清这种情况:如果我安装了对软件包B有依赖关系的软件包A,而B对软件包C有依赖关系,则软件包A在我指定的路径中,而B和C没有。我什至都不知道B包和C包在哪里。

1 个答案:

答案 0 :(得分:1)

  

nuget.config忽略依赖关系(子依赖关系)

这是.NET Core项目的正确行为。

在dotnet核心或使用PackageReference的项目中,仅列出了直接依赖项,并且仅将立即依赖项下载到程序包缓存中。

这就是为什么安装与软件包B有依赖关系的软件包A和B与软件包C有依赖关系的原因,软件包A会显示在项目文件中,例如:

<PackageReference Include="PackageA" Version="1.0.0" />

并缓存在指定的路径中,但B和C不在。

这是PackageReference的最大优势之一,在该优势中,我们不会因消费者可能不在乎的庞大的依赖项而使项目文件混乱。将您的nuget软件包安装到项目中,导航到project_root/obj/project.assets.json并打开此json,您会看到列出了软件包及其依赖项。如果您在此处看到预期的依赖关系,它将验证程序包是否已正确编写。但是,除非直接安装这些依赖关系,否则NuGet不会将依赖关系还原到程序包缓存中。

希望这会有所帮助。