You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TFS升级后Build Agent获取工作区失败:XML文档(1,1)错误求助

解决TFS 2018升级后构建代理拉取源码的XML解析异常问题

我之前碰到过几乎一模一样的场景——TFS从2015升级到2018后,旧版本构建代理偶尔出现XML解析失败的问题,手动执行命令却完全正常。咱们从问题根源和实际可行的解决方案入手:

问题根源分析

从日志里能看到,代理执行tf vc workspaces /format:xml命令时 exit code 0(说明命令本身执行成功),但返回的输出内容开头存在非XML合法字符(比如前导空行、UTF-8 BOM、或者命令行输出的额外提示信息),导致.NET的XmlSerializer解析时抛出“根级别数据无效”的错误。手动执行没问题是因为代理的运行环境(身份、编码、环境变量)和你本地用户环境有差异。

分步解决方案

1. 调整构建代理的运行身份

  • 默认情况下,构建代理可能用Local System账户运行,这个账户的环境变量、权限上下文和你手动执行命令的域用户不同。
  • 打开代理的服务(比如VSO Agent (AgentName)),将登录身份改为你手动执行命令时使用的域用户账户,重启代理服务后测试构建。

2. 捕获TF命令的实际输出

要确认返回的XML是否有问题,可以临时修改构建定义,在拉取源码步骤前添加一个命令行步骤,执行:

tf vc workspaces /format:xml /collection:http://servername:8080/tfs/ProjectCollection/ /loginType:OAuth /login:.,******** /noprompt > C:\temp\workspaces.xml

然后登录代理机器,用Notepad++打开workspaces.xml,查看文件开头是否有:

  • 多余的空行/空格
  • UTF-8 BOM(可以用Notepad++的“编码”菜单查看)
  • 任何非<Workspaces>开头的文本

如果发现有非XML内容,就针对性处理(比如移除BOM、调整命令输出)。

3. 升级构建代理版本

你当前使用的2.122.1版本是比较老旧的代理版本,和TFS 2018的兼容性存在已知问题。建议升级到兼容TFS 2018的最新代理版本(可从TFS服务器的代理下载页面获取),微软在后续版本修复了大量TF命令交互和XML解析的bug。

4. 调整编码匹配

日志里显示代理使用windows-1252编码解析输出,而TFS服务器可能返回UTF-8编码的XML。可以尝试在TF命令中指定编码:

tf vc workspaces /format:xml /collection:http://servername:8080/tfs/ProjectCollection/ /loginType:OAuth /login:.,******** /noprompt /encoding:utf-8

或者调整代理机器的系统区域设置,使其编码和TFS服务器保持一致。

5. 清理代理工作区缓存

代理可能残留了旧的工作区缓存文件,导致解析异常:

  • 停止代理服务
  • 删除代理目录下_work文件夹中的所有内容(注意备份重要文件)
  • 重启代理服务,重新运行构建

验证步骤

修改构建定义后,先执行一个测试构建,观察是否还出现XML解析错误。如果问题消失,再逐步恢复之前的配置,确认根本原因。

内容的提问来源于stack exchange,提问作者Rudolf Dvoracek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:04:53