在TFS Build 2015恢复NuGet包时,“无法找到版本”

18

我在TFS Build 2015中遇到了NuGet包还原方面的问题。

由于某些包要求使用 NuGet 3.x 客户端,因此我已经配置了新的可脚本化构建,以使用自定义 NuGet 位置,其中我放置了 NuGet Command-Line 3.x beta 的可执行文件。

每当我运行构建时,所有的包都无法还原,NuGet 抛出了 "Unable to find version..." 错误:

Unable to find version '1.1.10' of package 'Microsoft.Bcl'.
Unable to find version '4.0.10' of package 'System.Threading'.
Unable to find version '1.1.37' of package 'System.Collections.Immutable'.
Unable to find version '1.0.0' of package 'Owin'.
Unable to find version '4.1.0' of package 'NLog'.
Unable to find version '7.0.1' of package 'Newtonsoft.Json'.
Unable to find version '2.0.1' of package 'MongoDB.Driver.Core'.
Unable to find version '2.0.1' of package 'MongoDB.Driver'.
Unable to find version '2.0.1' of package 'MongoDB.Bson'.
Unable to find version '3.0.1' of package 'Microsoft.Owin.Security.OAuth'.

......还有更多的包。我相信问题很清楚。

当我使用Visual Studio在构建机器上构建相同的解决方案时,所有包都成功恢复了。

我该如何解决这个问题?


你安装了Microsoft.CodeAnalysis NuGet Packages吗?我安装了之后开始出现这些错误,当我移除所有的包后,它又恢复正常了。 - Schenz
@Schenz 我没有这个 NuGet 包。 - Matías Fidemraizer
4个回答

24
在我的情况下,问题在于位于 C:\Users\[User name]\AppData\Roaming\NuGet\NuGet.config(其中[User name]是运行构建代理的Windows服务的用户)的用户级别的NuGet.config指向NuGet API v2,而我的构建已经在使用NuGet命令行3.x更多信息请参考此处。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <!-- CHANGING V2 TO V3 IN THE URI VALUE SOLVED THE ISSUE! -->
    <add key="nuget.org" value="https://www.nuget.org/api/v3/" />
  </packageSources>
</configuration> 

我曾经遇到过类似的问题,但只有在尝试通过包管理器控制台安装软件包时才会出现;包管理器对话框可以正常工作。这个答案指引了我正确的方向:它是软件包源的URL问题。在我的情况下,Nuget.config中的URL为"https://www.nuget.org/api/v2/"。当我删除了“www”,将其更改为"https://nuget.org/api/v2/"时,它就可以工作了。 - Simon Elms
5
这个位置不存在(https://api.nuget.org/v3/index.json存在)...并且这里定义的两个密钥都具有相同的ID(“nuget.org”)。 - CJBS
在我的情况下,第三个版本已经在配置文件中指定了。我只是删除了配置文件的所有内容,这有所帮助: <?xml version="1.0" encoding="utf-8"?> </configuration> - David

3

在我的情况下,Nuget.Config 文件位于:

C:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\NuGet

在你的C盘中搜索Nuget.Config文件。
用户取决于你配置代理的帐户。

2
如果由于某种原因在漫游文件夹中更新NuGet.config不是一个选项或者不想要,也可以将配置文件添加到解决方案根目录中。
根据文档:
- 项目特定的 NuGet.Config 文件位于解决方案文件夹到驱动器根目录的任何文件夹中。这些文件允许控制设置,因为它们适用于一个项目或一组项目。 - 解决方案特定的 NuGet.Config 文件位于解决方案中的 .nuget 文件夹中。此文件中的设置仅适用于解决方案范围内的包,并且仅在 NuGet 3.3 及更早版本中支持。对于 NuGet 3.4 及更高版本,它将被忽略。 配置文件位置和用途

不错的补充。看起来这个问题有很多解决方法,具体取决于特定情况! - Matías Fidemraizer

0
您的项目文件夹必须包含“packages”文件夹,并且在该“packages”文件夹中应该存在所有软件包dll。 您的项目引用应该指向这些软件包dll。

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