Nuget依赖性解析

时间:2019-02-12 17:03:34

标签: visual-studio nuget mstest

以MsTest.TestAdapter版本1.4.0为例,我试图了解NuGet如何在安装过程中解决此程序包的依赖项。

我对每个软件包的哪个版本的详细信息不感兴趣,但对这些信息位于位置

如果我在任意文件夹中执行以下命令:

nuget install -source https://api.nuget.org/v3/index.json MSTest.TestAdapter -version 1.4.0

您将看到在安装结束时将安装50个软件包。

假设这些是NuGet解决的依赖关系,它在哪里得到这个依赖关系树?我查看了包裹信息(无核武器,道具,目标),找不到任何线索。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

如果“显性状态”是指nuget规范上的依赖项标签,那么我必须说我的目标是.NET 4.5,而不是.NETCoreApp1.0。这将如何工作?

就像Lex所说的那样:“程序包本身明确声明了直接依赖项是什么”,根据MSTest.TestAdapter,我们可以知道该程序包的依赖关系树是:

<dependencies>
  <group targetFramework=".NETCoreApp1.0">
    <dependency id="NETStandard.Library" version="1.6.1" />
    <dependency id="System.Diagnostics.TextWriterTraceListener" version="4.3.0" />
  </group>
</dependencies>

但是,如果您执行不带选项-Framework的安装命令,nuget将恢复该软件包的所有依赖关系。那就是为什么要安装50个软件包的原因。

如果要定位.NET 4.5,则应使用选项-Framework指定框架,例如:

nuget install -source https://api.nuget.org/v3/index.json MSTest.TestAdapter -version 1.4.0 -Framework 4.5

在这种情况下,nuget仅获取.NET 4.5的依赖项。有关更多详细信息,请查看文档install command (NuGet CLI)

注意:

  

install命令不会修改项目文件或packages.config。   通过这种方式,它类似于还原,因为它仅将软件包添加到   磁盘,但不会更改项目的依赖关系。

     

要添加依赖项,请通过“程序包管理器”添加程序包   UI或Visual Studio中的控制台,或修改packages.config,然后运行   安装或还原。

希望这会有所帮助。