在多个资源上安装带有依赖项的 NuGet 包

14

我的工作有一个私有NuGet仓库。我可以从私有仓库和nuget.org安装软件包。但是当私有仓库中的软件包依赖于nuget.org中托管的软件包时,就会遇到问题。

例如,我的私有仓库中托管一个名为P1的软件包。P1依赖于在nuget.org上托管的P2。如果我将私有仓库设置为源并执行“install-package P1”,则会出现错误,指出找不到依赖项P2。这很合理,因为它正在私有仓库中查找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文件里面有什么内容? - Petrik
没问题,看一下上面的修改。 - Opossum Posse
感谢您的补充。我刚在我的机器上测试了一下,它在那里运行得很好。我可以从我的本地 feed(在我的机器上)获取一个包,并且依赖项来自 nuget.org。那么下一个问题是,如果您运行 nuget.exe(命令行版本),会发生什么。例如,运行 nuget.exe install p1 并查看它是否获取所有软件包。另外,请问您使用的是哪个版本的 nuget 和 VS? - Petrik
我发现从命令行运行nuget.exe可以正常工作。然而,从VS运行NuGet非常不可靠。一个基本的命令,如install-package nlog -Source https://api.nuget.org/v3/index.json会返回几个不同的错误,例如“Install-Package:任务已取消。在第1行第1个字符处”或“无法连接到远程服务器,在第1行第1个字符处”。有时关闭VS并重新打开有所帮助,有时则没有。我正在运行VS 2015 v14和NuGet v3.3。 - Opossum Posse
如果在命令行中可以工作但在VS中无法工作,更新VS中的NuGet是否有帮助?这似乎是VS和命令行之间存在差异。 - Petrik
显示剩余3条评论
1个回答

9
使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接