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

如何用C#从TFS 2015识别成功构建项目及无项目时获取构建详情

嘿,我来帮你搞定这两个TFS 2015的C#开发问题!

1. 如何用C#从TFS 2015中确定哪些项目拥有成功的构建?

其实思路很直白:先获取TFS集合里的所有团队项目,然后逐个检查每个项目是否存在状态为成功的构建。下面是具体的实现步骤和代码:

  1. 首先引用必要的NuGet包:Microsoft.TeamFoundationServer.Client(注意对应TFS 2015的版本,一般选14.x系列)
  2. 通过TfsTeamProjectCollection连接到你的TFS集合
  3. 获取所有团队项目列表
  4. 遍历每个项目,检查是否有成功的构建

代码示例:

using Microsoft.TeamFoundation.Build.WebApi;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Core.WebApi;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

public async Task<List<TeamProjectReference>> GetProjectsWithSuccessfulBuilds(string collectionUri)
{
    var successfulProjects = new List<TeamProjectReference>();
    
    // 连接到TFS集合
    using (var tpc = new TfsTeamProjectCollection(new Uri(collectionUri)))
    {
        tpc.EnsureAuthenticated();
        
        // 获取项目客户端和构建客户端
        var projectClient = tpc.GetClient<ProjectHttpClient>();
        var buildClient = tpc.GetClient<BuildHttpClient>();
        
        // 获取所有团队项目
        var allProjects = await projectClient.GetProjects();
        
        // 遍历每个项目,检查是否有成功构建
        foreach (var project in allProjects)
        {
            // 查询该项目的成功构建(取最近的1个即可判断是否存在)
            var builds = await buildClient.GetBuildsAsync(
                project.Id,
                statusFilter: BuildStatus.Completed,
                resultFilter: BuildResult.Succeeded,
                top: 1);
            
            if (builds.Any())
            {
                successfulProjects.Add(project);
            }
        }
    }
    
    return successfulProjects;
}

这个方法会返回所有拥有至少一次成功构建的项目列表,你可以根据需要调整查询参数(比如时间范围、构建定义等)。


2. 能否在不指定具体项目的情况下,通过C#/.NET获取TFS成功构建的详细信息?

当然可以!你不需要绑定单个项目,直接调用Build API的全局查询能力就能拿到所有成功的构建记录,还能关联到对应的项目信息。下面是实现代码,基于你提供的现有代码扩展:

using Microsoft.TeamFoundation.Build.WebApi;
using Microsoft.TeamFoundation.Client;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

public async Task<List<Build>> GetAllSuccessfulBuilds(string collectionUri)
{
    var successfulBuilds = new List<Build>();
    
    using (var tpc = new TfsTeamProjectCollection(new Uri(collectionUri)))
    {
        tpc.EnsureAuthenticated();
        var buildClient = tpc.GetClient<BuildHttpClient>();
        
        // 全局查询所有成功完成的构建,不需要指定项目ID
        // 可以根据需求添加更多筛选条件:比如时间范围、构建定义、分支等
        var builds = await buildClient.GetBuildsAsync(
            statusFilter: BuildStatus.Completed,
            resultFilter: BuildResult.Succeeded,
            top: 100); // 按需调整返回数量,或者分页获取
        
        if (builds.Any())
        {
            successfulBuilds.AddRange(builds);
            // 每个Build对象里包含Project属性,可以拿到项目的名称、ID等信息
            // 比如 build.Project.Name 就能获取构建所属的项目名
        }
    }
    
    return successfulBuilds;
}

补充说明:

  • 如果你需要更详细的构建信息(比如日志、关联的变更集等),可以调用buildClient.GetBuildAsync(build.Id)获取单个构建的完整详情
  • 注意TFS 2015的API有一些版本限制,确保你的NuGet包版本和TFS服务器版本匹配(14.x对应TFS 2015)
  • 如果构建数量很多,建议使用分页查询(通过continuationToken参数),避免一次性返回过多数据导致性能问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:20:06