调用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
相关产品推荐
相关产品推荐

