【问题标题】:using nuget.exe commandline to install dependency使用 nuget.exe 命令行安装依赖项
【发布时间】:2015-10-23 22:29:18
【问题描述】:

我想在我的 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 编辑器中安装 A 时,B 也会被安装。(这应该会发生)。

当我只安装 A 时,如何使用 nuget.exe 并安装依赖项 B(仅将 A 放在 packages.config 中)。

谢谢

【问题讨论】:

  • 我在 nuget.codeplex.com 上创建了一个问题,这不是您的确切问题,但也可以使用稍微不同的工作流程解决它:nuget.codeplex.com/workitem/4258

标签: nuget


【解决方案1】:

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

如果您查看源代码,您会看到 nuget.exe install 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的硬调用

【讨论】:

    猜你喜欢
    • 2015-03-26
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2017-08-13
    相关资源
    最近更新 更多