由于NuGet版本不正确,TFS Build 2015失败,即使构建机器中存在所需的NuGet版本

时间:2015-09-04 08:26:25

标签: visual-studio tfs nuget tfsbuild tfs2015

我正在使用新的脚本系统配置TFS 2015构建。在构建期间,当NuGet重新编译某些包时,它会因以下错误而失败:

  

' System.Collections 4.0.10'包需要NuGet客户端版本   ' 3.0'或以上,但目前的NuGet版本为' 2.8.60318.667'。

     

System.Diagnostics.Debug 4.0.10'包需要NuGet客户端   版本' 3.0'或以上,但目前的NuGet版本是   ' 2.8.60318.667'

     

System.Globalization 4.0.10'包需要NuGet客户端   版本' 3.0'或以上,但目前的NuGet版本是   ' 2.8.60318.667'

     

System.Linq 4.0.0'包需要NuGet客户端版本' 3.0'要么   上面,但目前的NuGet版本是' 2.8.60318.667'。

     

System.Resources.ResourceManager 4.0.0'包需要NuGet   客户端版本' 3.0'或以上,但目前的NuGet版本是   ' 2.8.60318.667'

     

System.Runtime 4.0.20'包需要NuGet客户端版本   ' 3.0'或以上,但目前的NuGet版本为' 2.8.60318.667'。

     

System.Runtime.Extensions 4.0.10'包需要NuGet客户端   版本' 3.0'或以上,但目前的NuGet版本是   ' 2.8.60318.667'

     

System.Threading 4.0.10'包需要NuGet客户端版本   ' 3.0'或以上,但目前的NuGet版本为' 2.8.60318.667'。

顺便说一句,我已经在整个构建计算机中安装了Visual Studio 2015,并且我已经检查过扩展管理器菜单中是否存在NuGet 3.1。

我想TFS Build正在使用不同的NuGet安装位置,但是我无法找出它在哪里寻找它以及如何将它从2.8.x更新到3.x.

4 个答案:

答案 0 :(得分:6)

这个问题有一个解决方法。

默认情况下,如果您使用VSBuild / MSBuild任务,则只能通过相应的复选框选择是否运行nuget restore。但是有一个名为 NuGet Installer 的单独任务(它位于 Package 部分)。它公开了NuGet.exe的自定义路径的可选字段:

enter image description here

所以,这是一个想法:

  • 在适当的VSBuild / MSBuild步骤之前安排 NuGet安装程序步骤
  • 指定NuGet.exe的正确自定义路径
  • 确保VSBuild / MSBuild步骤的 Restore NuGet packages 标志为 off

注意:直接在构建代理程序内部替换物理可执行文件的解决方案可能会很好地运行,直到更新代理程序(无论是故意的还是自动的),并用更新但仍过时的版本覆盖NuGet.exe。 / p>

答案 1 :(得分:2)

比我想象的要容易......

检查TFS构建日志后,我找到了以下字符串:

  

X:\ TfsBuild \代理\项目\剂\工人\工具\ NuGet.exe   恢复   " X:\ TfsBuild \代理\项目\ c57207ab \路径\到\溶液\ whatever.sln"   -nonInteractive

也就是说,当从TFS Web Access下载TFS构建代理ZIP时,它包含一个过时的NuGet可执行文件。

最糟糕的部分是没有公开发布的NuGet Command-Line 3.x可执行文件,而我需要在I've found a post in the official NuGet blog指向NuGet Command-Line 3.1 beta version executable已更换{{}}后使用Google构建代理工具位置中的那个与beta 1一起,错误得到修复。

该问题也会影响XAML版本

如果您想使用XAML版本,您需要下载相同的NuGet命令行可执行文件并将其复制到C:\Program Files\Microsoft Team Foundation Server 14.0\Tools\nuget.exe并替换现有版本...

答案 2 :(得分:0)

我遇到了同样的问题。您需要使用更新版本的nuget.exe 。版本 3.5.0 解决了我的问题。

您可以在此处下载Nuget发行版:https://dist.nuget.org/index.html

答案 3 :(得分:0)

解决方案顶部应该有一个.NuGet文件夹。 TFS将使用此文件夹中的nuget.exe进行包还原操作。

  • 访问此网址:https://dist.nuget.org/index.html
  • 下载最新的nuget.exe
  • 从.nuget文件夹中删除现有的nuget.exe。
  • 使用add / existing item将新的nuget.exe添加到此文件夹。
  • 检查更改。

您现在应该能够对构建进行排队并使其成功恢复包。