错误“找不到具有以下功能的代理:msbuild、visualstudio、vstest”

76

我正在使用TFS 2015设置新的构建服务器,在配置代理之后,当我尝试排队构建时,出现以下错误:

找不到具备以下能力的代理:msbuild、visualstudio、vstest

如何解决这个问题?

13个回答

60

在您的构建代理上安装Visual Studio,然后重新启动构建代理。重新启动构建代理将捕获添加的功能。


5
可以使用这种方法,但我想知道是否有其他解决方案来避免在开发服务器上安装Visual Studio。谢谢。 - Jean Jimenez
6
没有理由不在您的构建服务器上安装Visual Studio——它不包含在许可成本中。 - Daniel Mann
6
我同意,Visual Studio没有包含在“官方TFS构建部署先决条件”中,但是根据细节,实际上却是需要的...这真令人烦恼... https://msdn.microsoft.com/zh-cn/library/bb399135.aspx?f=255&MSPPError=-2147217396#Anchor_1 - rducom
3
据您所知,社区版是否提供了构建服务器配置所需的必要先决条件? - InteXX
18
补充一下,我发现在为构建代理服务器安装新功能后“更新”构建最快的方法是到管理区域的代理池中心(<你的 TFS 服务器>/tfs/_admin/_AgentPool?hubGroupId=ms.vss-web.account-admin-hub-group),选择你的代理所在的池,并右键单击“更新所有代理”。 - Dewi Rees
显示剩余5条评论

29

注意:首先,您可以在您自己的服务器上使用社区版和TFS Express 2015(免费提供给最多五个用户),因此不用担心需要使用Visual Studio在线版或支付Visual Studio专业版。


很容易误解所提供的错误消息并试图进行调试。

不幸的是,这条消息本身措辞不当,这才是真正的问题。

这就是该错误消息真正的含义:

“找不到以下功能的代理程序:msbuild、visualstudio、vstest。实际上,我甚至没有找到已配置为选定生成队列的任何生成代理程序。”

所以你认为这并不适用于你,因为你只是创建了一个生成代理程序吗?

好吧,也许你确实这样做了,但这里可能发生了什么:

  • 你创建了一个新池(原因只是因为你认为你应该这样做)。
  • 然后在该池下创建了一个队列。
  • 你运行了PowerShell脚本来创建代理程序并且你假设它将代理程序放在你刚刚创建的池中...
  • 但它没有--它将它放在你甚至没有使用的 'default' 池中...

啊哈!

因此,当您进行构建时会发生以下情况:

  • 您从下拉列表中选择一个队列。
  • TFS尝试构建,通过查找与该队列对应的池,但在那里根本找不到任何代理程序,因此您会得到一个愚蠢且无用的误导性错误消息。

当我最终意识到发生了什么时,我只是删除了我的可爱命名的池+队列,并回到使用默认池。

下次我会尝试在PowerShell配置期间更加注意这条消息:

请配置此代理程序针对哪个代理程序池?(默认池名称为“default”)

您将需要在池下创建一个队列,但然后您的代理程序应该开始工作了。

如果您的代理程序确实存在某种缺少功能,可以通过此处显示的“功能”选项卡检查代理程序支持的内容。当然,msbuild、visualstudio和vstest都在这里 :-)

Enter image description here


这个答案中最后一个截图正是我要找的。 - fujiiface

12
在我的情况下,在安装了MSBuild(https://www.visualstudio.com/downloads/,搜索“Visual Studio 2017构建工具”)之后,我只需要将MSBuild的路径添加到PATH环境变量中。在我这样做之前,代理程序无法检测到MSBuild。
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin

我不需要安装完整的Visual Studio集成开发环境。对于这个问题所选择的答案就是完全错误的...


6
我使用了稍晚一些的“Visual Studio 2019建构工具”,需要添加的路径是:C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin。是的,不需要完整的Visual Studio。感谢您的提示。 - Brian Cryer
@Brian,在VS 2019中你在哪里设置那个路径变量? - JanF
1
@JanF,这是一个环境变量,所以应该在 Windows 中设置而不是在 Visual Studio 中设置。对于 Windows 10 Pro:打开文件浏览器>右键单击“此电脑”并选择属性>高级系统设置(在表单底部)>在“高级”选项卡中有一个“环境变量...”按钮。这将为您提供编辑路径的选项。保留原有内容,仅添加新文件夹即可。 - Brian Cryer

8
默认情况下,在VSO上使用新的构建系统时,它不会选择托管构建选项,这就是我在Stack Overflow上查阅此帖子的原因。如果您习惯于使用VSO构建服务器,则需要执行以下操作:
通过转到“常规”选项卡并将默认队列更改为托管来创建托管生成。有关其限制和工作原理的更多信息,请参见此处:https://www.visualstudio.com/get-started/build/hosted-agent-pool

1
谢谢,这正是我需要做的。 - Mido
如果您正在运行自己的TFS(包括TFS Express 2015),那么如果您没有看到托管构建选项,请不要惊慌。您可以使用默认选项。 - Simon_Weaver

1
将它们添加为用户定义的功能,例如:
visualstudio   C:\Program Files\Microsoft Visual Studio\2022\Community

vstest         C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow

我最初在一台没有安装Visual Studio的机器上安装了代理。但是,在安装Visual Studio(然后安装Visual Studio Build Tools),重新启动/重建代理,重新启动我的机器等之后,我无法让代理自动检测到新的功能,因此我在Azure DevOps作为用户定义的能力中手动添加了它们。

0

我正在使用Xcode构建从机来构建一个Xcode项目。

在TFS 2015中,我最终遇到的错误信息是:

"找不到具备以下能力的代理:xcode"

我注册了一个OS X本地构建从机

在“注册代理”步骤中,我为我的构建代理命名:

>> Register Agent:

Enter agent pool (press enter for default) > My-Xcode-Agent-Pool

所以,我必须在构建设置中选择“My-Xcode-Agent-Pool”作为默认队列。来源:Microsoft 托管代理


0

根据微软的https://msdn.microsoft.com/zh-cn/ie/bb399135(v=vs.94),您必须在构建代理上安装与团队开发机器上使用的Visual Studio版本相同的版本。请参阅安装Visual Studio。您还必须安装在开发机器上安装的任何其他软件和组件,以及构建应用程序所需的任何其他软件和组件。


0
在我的情况下,安装了MSBuild后,重新启动所有Azure服务(在Windows服务中),问题就解决了。无需安装完整的Visual Studio。

0
我最后解决的办法是去下载代理的地方,然后运行:./config.cmd remove,再在代理目录中使用命令行运行 ./config.cmd 重新安装代理。

下载代理


0

尽管之前的答案都对我没用,但Simon_Weaver的帖子指引了我正确的方向。

他提到vstest在他的列表中,但它不在我的列表中。我通过添加一个名为“vstest”的用户自定义功能并在Visual Studio 2017下指定vstest.console.exe的完整路径来解决了这个问题。


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