繁体   English   中英

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

[英]using nuget.exe commandline to install dependency

我想在我的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>

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

<packages>
  <package id="A" version="1.0.0.1" allowedVersions="[1,2)"/>
</packages>

我运行以下命令:

NuGet.exe install packages.config -ExcludeVersion -Outputdir libs -source http://get.nuget.mydomain

我得到输出:

Successfully installed 'A 1.0.0.1'.

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

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

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

谢谢

这是不可能的。 packages.config文件的行为是设计使然。 仅安装packages.config中指定的内容,而不是其依赖项。 还必须明确指定所有依赖项。

如果查看源代码,您将看到nuget.exe安装packages.config( http://nuget.codeplex.com/SourceControl/latest#src/CommandLine/Commands/InstallCommand.cs )使用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));
    }

注意对ignoreDependencies: true的硬调用ignoreDependencies: true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM