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

使用nuget.exe命令行安装依赖项,nuget,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>

我想在我的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>
我得到输出:

Successfully installed 'A 1.0.0.1'.
但是不要安装我的依赖项B

但如果将B分别放在packages.config文件中,我会同时安装A和B。我希望在安装A时安装B,因为它是A的依赖项。 我们没有将DLL放在GAC中(所以我相信依赖项解析应该不会是一个问题)。 另外,当我在VisualStudio中安装from with时,编辑器B也会被安装。(这是应该发生的事情)

仅安装A(仅将A放入packages.config)时,如何使用nuget.exe和安装依赖项B


谢谢

这是不可能的。packages.config文件的行为是由设计决定的。仅安装packages.config中指定的内容,而不安装它们的依赖项。所有依赖项也必须显式指定

如果查看源代码,您将看到nuget.exe install packages.config()使用PackageExtractor.InstallPackage():


请注意对
ignoreDependencies:true的硬调用

我在nuget.codeplex.com上创建了一个问题,这不是您的确切问题,但也将使用稍微不同的工作流来解决它:
NuGet.exe install packages.config -ExcludeVersion -Outputdir libs -source http://get.nuget.mydomain
Successfully installed 'A 1.0.0.1'.
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));
    }