【问题标题】:Installing NuGet package with dependencies on multiple sources安装依赖多个源的 NuGet 包
【发布时间】:2016-03-03 17:40:09
【问题描述】:

我的工作有一个私人 NuGet 存储库。我可以从它和 nuget.org 安装软件包。当私有仓库中存储的包依赖于 nuget.org 上托管的包时,我遇到了问题。

例如,我的私人仓库托管了一个包 P1。 P1 依赖于托管在 nuget.org 上的 P2。如果使用我的私人仓库设置为源执行“安装包 P1”,我会收到一条错误消息,说它找不到依赖项 P2。这是有道理的,因为它在私人仓库中寻找 P2,但它托管在 nuget.org 上。到目前为止,解决方法是从 nuget.org 安装 P2,然后从私人仓库安装 P1。虽然这在技术上可行,但很乏味,并且会使向团队其他成员销售 NuGet 变得困难。

无论如何我可以使用多个来源运行 install-package 吗?我试过将一个列表传递给 -Source 参数,但到目前为止已经得到了

NuGet.config 由 Visual Studio 管理,因此每次在 Visual Studio 中运行 nuget 命令时,我对其所做的任何更改都会被清除。我尝试在解决方案级别添加一个额外的 nuget.config 文件,但据我所知它被忽略了。我已经尝试了几次 install=package 命令,但它们通常看起来像这样:

Install-Package P1 -Source https://api.nuget.org/v3/index.json,http://privatefeed.com

这里的参考是 NuGet.config 文件,但更改它似乎是徒劳的。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="Private Nuget" value="http://privatefeed.com" />
  </packageSources>
  <disabledPackageSources>
    <add key="Microsoft and .NET" value="true" />
  </disabledPackageSources>
  <activePackageSource>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </activePackageSource>
</configuration>

【问题讨论】:

  • 你能告诉我们你一直在使用的命令行吗?你的 nuget.config 中有什么
  • 没问题,请参阅上面的编辑。
  • 感谢您的补充。我刚刚在我的机器上测试了它,它在那里工作正常。我可以从本地提要(在我的机器上)获取一个包,并让依赖项来自 nuget.org。所以下一个问题是如果你运行 nuget.exe(命令行版本)会发生什么。例如做 nuget.exe install p1 看看它是否抓取了所有的包。还有你有什么版本的nuget和VS?
  • 我发现从命令行运行 nuget.exe 可以正常工作。但是,从 VS 运行 NuGet 极其不可靠。诸如 install-package nlog -Source api.nuget.org/v3/index.json 之类的基本命令会返回一些不同的错误,例如“Install-Package : A task was cancelled.At line:1 char:1”或“Unable to connect to the remote serverAt line :1 字符:1"。有时关闭 VS 并重新打开会有所帮助,有时则没有。我正在运行 VS 2015 v14 和 NuGet v3.3
  • 我不确定这是否重要,但私有 NuGet 需要 Nt 身份验证,因此每当我安装包形式时,我都会被提升为用户名/密码

标签: visual-studio nuget nuget-server


【解决方案1】:

使用 NuGet.exe,您可以重复 -Source 选项来指定多个包源。

例子:

nuget install P1 -Source https://api.nuget.org/v3/index.json -Source http://privatefeed.com

似乎无法使用包管理控制台 (PowerShell) 指定多个源。但是,如果未指定 -Source,则使用 NuGet.Config 文件。配置文件可以有多个包源,并且文件本身可以与团队共享。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="Private Nuget" value="http://privatefeed.com" />
  </packageSources>
</configuration>

在与您的解决方案相同的目录中另存为 NuGet.Config 并将其添加到版本控制中。

请注意,您可能需要重新加载 Visual Studio 才能使配置更改生效。

现在你可以在不配置-Source的情况下安装包。

例子:

Install-Package P1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2014-07-19
    相关资源
    最近更新 更多