Nuget还原通过构建服务器时“找不到版本”

44

我有一个VS解决方案,作为TeamCity Build的一部分,我们从私有NuGet Feed(myget)和公共Feed(nuget.org)中恢复包。大多数包都可以恢复,但是WebApi和Mono.Security这些包卡住了。这在Visual Studio本地环境下全部正常。

[restore] NuGet command: C:\TeamCity\buildAgent\plugins\nuget-agent\bin\JetBrains.TeamCity.NuGetRunner.exe C:\TeamCity\buildAgent\tools\NuGet.CommandLine.DEFAULT.nupkg\tools\NuGet.exe restore C:\TeamCity\buildAgent\work\953bd084b49f7d88\DataFinch.Web.sln -Source https://www.myget.org/F/datafinch/auth/<hidden>/api/v2 -Source https://api.nuget.org/v3/index.json
[11:41:35][restore] Starting: C:\TeamCity\buildAgent\temp\agentTmp\custom_script473789219385667038.cmd
[11:41:35][restore] in directory: C:\TeamCity\buildAgent\work\953bd084b49f7d88
[11:41:35][restore] JetBrains TeamCity NuGet Runner 8.0.37059.9
[11:41:35][restore] Registered additional extensions from paths: C:\TeamCity\buildAgent\plugins\nuget-agent\bin\plugins-2.8
[11:41:35][restore] Starting NuGet.exe 2.8.50926.602 from C:\TeamCity\buildAgent\tools\NuGet.CommandLine.DEFAULT.nupkg\tools\NuGet.exe
[11:41:43][restore] Unable to find version '5.2.3' of package 'Microsoft.AspNet.WebApi.Client'.
[11:41:43][restore] Unable to find version '5.2.3' of package 'Microsoft.AspNet.WebApi.Core'.
[11:41:43][restore] Unable to find version '3.2.3.0' of package 'Mono.Security'.
[11:41:43][restore] Unable to find version '6.0.4' of package 'Newtonsoft.Json'.
[11:41:43][restore] Process exited with code 1

Teamcity配置: 在此输入图片描述


你是否将私有源添加到了Nuget.targets中?https://docs.nuget.org/consume/package-restore - Tony
6个回答

46

1
当我从v2切换到v3时,它再次对我起作用。谢谢你的提示。 - timmkrause
2
或者升级 nuget.exe,它将默认使用新的 URL。 - xmedeko
3
我在使用旧版本的 NuGet.exe 时遇到了使用新私有 NuGet feed 的问题。为了解决这个问题,打开命令提示符,cd 到你的 .nuget 文件夹,并运行 .\NuGet.exe update -self 命令。 - Phil
在Debian上安装NuGet(NuGet版本:2.8.1.0)后,我遇到了相同的问题,切换到v2 API解决了我的问题。 - Scott Weldon
1
我曾经遇到过同样的问题,但是我的“Packages Sources”字段是空白的,因为它说“留空以使用NuGet.org”。这个方法长期以来一直有效,但最近我尝试排队构建时,出现了与Chris Kooken看到的相同行为。一旦我将源https://www.nuget.org/api/v2添加到该字段中,它就开始工作了。我不确定是什么改变导致了这种情况,但这个答案确实帮助了我。 - tjans
这让我朝着正确的方向前进了。我需要的本地NuGet服务器的URL在index.json中。 - Brandon Griffin

3
构建失败的原因是nuget.exe版本过旧。我通过下载最新版本并将其放在Program Files x86文件夹中来解决这个问题。然后,我创建了一个新的系统变量来指向这个可执行文件。之后,我在我的TFS Build Definition中添加了一个NuGetInstaller包,以便我可以使用这个新的NuGet.exe配置TFS。 这个链接帮助我让TFS使用这个新的NuGet版本

我做了类似于你所描述的事情,但是我没有创建系统变量,而是将当前的NuGet.exe(5.11.0)放入了TFS 2015构建服务器上可用于构建代理的文件夹中。然后,我将NuGet.exe的完全限定路径放入了构建定义中。这解决了我大部分的NuGet问题,但对于3个包Newtonsoft.Json、Antlr和WebGrease仍未解决。 - Rod

1
我按照这个链接进行了操作:https://blogs.msdn.microsoft.com/tfssetup/2017/04/18/tfs-2017-update-1-nuget-restore-task-always-fails-trying-to-find-packages-even-though-they-exist-on-the-feed/ 我尝试使用3.3版本,但出现了以下错误:

正在还原 NuGet 包 Microsoft.AspNet.WebPages.3.2.3。 警告: 找不到程序包 'Antlr' 的版本 '3.5.0.2'。

我下载了最新的NuGet 4.3.0.4406并将自定义路径设置为NuGet,但仍然失败。
令人惊讶的是,当我切换到3.5版本时它可以工作。

enter image description here

如果你真的卡住了,可以在命令行提示符中运行该命令,它会起作用:
C:\Program Files (x86)\NuGet\nuget.exe restore -NonInteractive E:\agentXYZPool\_work\1\s\xyz.sln

0

根据微软最新的文档(THIS),正确的URL是:https://api.nuget.org/v3/index.json

因此,我开始解决问题,因为我认为它与URL无关。我做了两件事情,不确定哪一件解决了问题,但我会在这里都发布以帮助其他人。

  • 在TFS2018中,在我的Nuget安装构建步骤中,我指定了版本4.9.3(我选择4.9.3的原因是通过查看VS的详细日志,我发现在我的构建过程中使用了这个版本),并选择始终下载最新版本。

  • 我做的第二件事是从我的项目中删除一个Nuget.Config文件,这是我测试留下的。然后我重新提交了我的更改到TFS。

在我完成上述两个步骤之后,我的其余构建开始工作了。


0

我在使用TFS和Visual Studio的构建从机时遇到了这个问题。

我解决的方法是,在Visual Studio中打开无法编译的解决方案,右键单击SLN并选择“启用还原NuGet包”

这会提示一个对话框,您必须接受。完成后,您可能就可以开始了。再次右键单击SLN并运行“还原NuGet包”,如果该操作成功,则一切正常。

可能有一些设置可以在设置从机环境时以编程方式调整,但这是解决此类问题的一种直接方法。


0

使用旧版的Visual Studio Nuget

  • Visual Studio有C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\Nuget.exe。Jenkins正在使用它来nuget restore
  • 在程序文件中更新了Nuget,
    C:\Program Files (x86)\NuGet> ./nuget.exe update -self
    
  • 将Jenkins指向新的Nuget路径并开始使用
    SET PATH=%PATH%;C:\Program Files (x86)\NuGet
    nuget restore SolutionName.sln
    

Visual Studio 2019 Professional不附带nuget.exe。相反,它附带了一个用于NuGet的PowerShell模块。可以从https://learn.microsoft.com/en-us/nuget/install-nuget-client-tools下载独立的nuget.exe,但将Visual Studio的NuGet配置更改为搜索v2 NuGet存储库解决了我的问题(请参见其他答案)。 - MikeOnline

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