使用nuget.exe命令行安装依赖项

use*_*773 17 nuget

我想在我的CI构建管道中使用nuget.exe(版本2.5)来安装一个依赖于另一个包的包.

我有以下nuspec文件.

<?xml version="1.0"?>
<package>
  <metadata>
    <id>A</id>
    <dependencies>
      <dependency id="B" version="1.0.0.1" />
    </dependencies>
  </metadata>
  <files>
    <file src="A.dll" target="lib" />
  </files>
</package>
Run Code Online (Sandbox Code Playgroud)

类似的B.和我以前安装的packages.config文件是:

<packages>
  <package id="A" version="1.0.0.1" allowedVersions="[1,2)"/>
</packages>
Run Code Online (Sandbox Code Playgroud)

我运行以下命令:

NuGet.exe install packages.config -ExcludeVersion -Outputdir libs -source http://get.nuget.mydomain
Run Code Online (Sandbox Code Playgroud)

我得到输出:

Successfully installed 'A 1.0.0.1'.
Run Code Online (Sandbox Code Playgroud)

但是不要安装我的依赖关系B.

但是如果将B单独放在packages.config文件中,我会同时安装A和B. 我希望在安装A时安装B,因为它是A的依赖项.我们不把dll放在GAC中(所以我认为依赖解析不应该是一个问题).我也打开A.nupkg并检查它是否有依赖列在那里.此外,当我在Visual Studio编辑器B中安装A时,也会安装.(这应该是什么).

如何仅在安装A时使用nuget.exe并安装依赖关系B(仅在packages.config中放置A).

谢谢

fer*_*der 7

This is not possible. The behavior of the packages.config file is by design. Only things specified in the packages.config are installed, not their dependencies. All dependencies must be explicitly specified as well.

If you look at the source code you will see that nuget.exe install packages.config (http://nuget.codeplex.com/SourceControl/latest#src/CommandLine/Commands/InstallCommand.cs) uses PackageExtractor.InstallPackage (http://nuget.codeplex.com/SourceControl/latest#src/CommandLine/Common/PackageExtractor.cs):

public static void InstallPackage(IPackageManager packageManager, IPackage package)
    {
        var uniqueToken = GenerateUniqueToken(packageManager, package.Id, package.Version);
        // Prerelease flag does not matter since we already have the package to install and we ignore dependencies.
        ExecuteLocked(uniqueToken, () => packageManager.InstallPackage(package, ignoreDependencies: true, allowPrereleaseVersions: true));
    }
Run Code Online (Sandbox Code Playgroud)

Note the hard call to ignoreDependencies: true