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

调用TFS2013 API获取构建历史时遇类型转换错误求助

问题原因与解决方案

这个错误的核心原因是你使用的Azure DevOps .NET Client Libraries版本和TFS2013的API不兼容,具体是枚举值的序列化/反序列化不匹配导致的。

为什么会出现这个错误?

  • 枚举值命名不匹配:TFS2013的Build API返回的status字段值是小写的"failed",但你当前使用的新版客户端库中,BuildStatus枚举对应的失败状态是首字母大写的Failed(或者枚举值的内部映射已经调整)。JSON反序列化器无法把字符串"failed"匹配到对应的枚举成员,因此抛出转换错误。
  • 客户端库版本不对:VssConnection和BuildHttpClient属于较新的Azure DevOps SDK,这类SDK主要针对Azure DevOps Services和TFS2017及以上版本设计。TFS2013是非常老旧的版本(2013年发布),其API协议和数据格式与新版SDK存在诸多不兼容之处。

解决方法

1. 改用TFS2013兼容的传统客户端库

对于TFS2013,更合适的方式是使用旧版的TFS客户端库(不是基于REST的Azure DevOps SDK)。你可以安装Microsoft.TeamFoundationServer.Client的14.x版本(对应TFS2015,向下兼容TFS2013),然后使用以下代码获取构建历史:

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Build.Client;

// 初始化TFS项目集合
var tfsCollection = new TfsTeamProjectCollection(new Uri(uri), cred);
tfsCollection.EnsureAuthenticated();

// 获取构建服务
var buildServer = tfsCollection.GetService<IBuildServer>();

// 查询指定项目的构建历史
var builds = buildServer.QueryBuilds(teamProjectName);

2. 手动调用REST API并处理JSON

如果你坚持使用REST方式,可以直接调用TFS2013的原生REST端点,用动态类型或自定义DTO来接收数据,避开枚举反序列化问题:

using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json.Linq;

var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// 添加身份验证(比如基本认证)
var byteArray = System.Text.Encoding.ASCII.GetBytes($"{username}:{password}");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

// 调用TFS2013的构建API
var response = await client.GetAsync($"http://<tfs-server>:8080/tfs/<collection>/{teamProjectName}/_apis/build/builds?api-version=1.0");
response.EnsureSuccessStatusCode();
var jsonString = await response.Content.ReadAsStringAsync();
var builds = JArray.Parse(jsonString);

// 手动处理构建数据,比如提取status字段
foreach (var build in builds)
{
    var status = build["status"].ToString();
    // 后续逻辑
}

3. 升级TFS服务器(推荐)

TFS2013已经停止官方支持多年,不仅存在兼容性问题,还可能有安全隐患。如果条件允许,建议升级到最新版的Azure DevOps Server,这样就能无缝使用最新的客户端库和API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:07:45