5

我正在使用新的可脚本化系统配置 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

4 回答 4

6

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

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

在此处输入图像描述

所以,这是一个想法:

  • 在适当的 VSBuild/MSBuild 步骤之前安排NuGet 安装程序步骤
  • 指定 NuGet.exe 的正确自定义路径
  • 确保VSBuild/MSBuild 步骤的还原 NuGet 包标志关闭

注意:在构建代理内部直接替换物理可执行文件的解决方案可能会运行良好,直到代理更新(有意或以某种方式自动)并用更新但仍然过时的版本覆盖 NuGet.exe。

于 2015-09-06T19:42:29.610 回答
2

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

检查 TFS 构建日志后,我发现以下字符串:

X:\TfsBuild\Agents\project\agent\worker\tools\NuGet.exe 恢复“X:\TfsBuild\Agents\project\c57207ab\path\to\solution\whatever.sln”-NonInteractive

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

最糟糕的是,没有公开可用的 NuGet 命令行 3.x 可执行文件,一旦我在官方 NuGet 博客中找到一篇指向我已替换的NuGet 命令行 3.1 测试版可执行文件的帖子,我就需要使用 Google构建代理工具位置中的一个带有 beta 版本,并且错误得到了修复。

该问题还影响 XAML 构建

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

于 2015-09-04T08:57:51.200 回答
0

我有同样的问题。您需要使用更新版本的 nuget.exe3.5.0版解决了我的问题。

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

于 2017-01-11T14:57:13.213 回答
0

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

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

您现在应该能够将构建排队并让它成功恢复包。

于 2017-06-30T14:27:29.410 回答