以MsTest.TestAdapter版本1.4.0为例,我试图了解NuGet如何在安装过程中解决此程序包的依赖项。
我对每个软件包的哪个版本的详细信息不感兴趣,但对这些信息位于位置。
如果我在任意文件夹中执行以下命令:
nuget install -source https://api.nuget.org/v3/index.json MSTest.TestAdapter -version 1.4.0
您将看到在安装结束时将安装50个软件包。
假设这些是NuGet解决的依赖关系,它在哪里得到这个依赖关系树?我查看了包裹信息(无核武器,道具,目标),找不到任何线索。
有什么想法吗?
答案 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,然后运行 安装或还原。
希望这会有所帮助。