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

如何通过C# TFS客户端库获取团队及用户的工作容量与休假信息?

获取TFS团队及用户工作容量/休假信息的C#实现

我之前也折腾过这个需求,确实TFS官方客户端库的这部分文档藏得比较深,很容易走偏。下面是我实际验证过的方案,用官方的客户端库就能搞定:

第一步:准备依赖包

首先确保你的项目安装了这两个NuGet包:

  • Microsoft.TeamFoundationServer.Client(核心TFS客户端API)
  • Microsoft.VisualStudio.Services.Client(用于身份验证和连接)

获取团队工作容量及成员休假信息

工作容量和休假是和**迭代(Iteration)**绑定的,所以需要先定位到目标团队的具体迭代,再获取对应的数据:

using Microsoft.TeamFoundation.Core.WebApi;
using Microsoft.TeamFoundation.Work.WebApi;
using Microsoft.VisualStudio.Services.Client;
using Microsoft.VisualStudio.Services.Common;

// 1. 建立与TFS服务器的连接
var tfsUri = new Uri("http://your-tfs-server:8080/tfs/YourCollection");
var credentials = new VssBasicCredential("", "your-personal-access-token"); // 可用PAT或域账号
using var connection = new VssConnection(tfsUri, credentials);

// 2. 获取TeamSettingsHttpClient实例
var teamSettingsClient = connection.GetClient<TeamSettingsHttpClient>();

// 3. 定位目标团队(需要团队ID/名称,以及项目名称)
string projectName = "YourProjectName";
string teamName = "YourTeamName";
var team = await teamSettingsClient.GetTeamAsync(projectName, teamName);

// 4. 获取团队的当前活跃迭代(也可指定迭代路径/ID)
var teamSettings = await teamSettingsClient.GetTeamSettingsAsync(team.ProjectId, team.Id);
var currentIteration = teamSettings.CurrentIteration;

// 5. 获取该迭代下的团队容量信息(包含成员的工作容量和休假)
var capacities = await teamSettingsClient.GetCapacitiesAsync(team.ProjectId, team.Id, currentIteration.Id);

// 6. 遍历处理每个成员的信息
foreach (var capacity in capacities)
{
    Console.WriteLine($"成员: {capacity.TeamMember.DisplayName}");
    Console.WriteLine($"每日工作容量: {capacity.DaysPerWeek} 天/周");
    Console.WriteLine($"已分配容量: {capacity.CapacityPerDay} 小时/天");
    
    // 休假信息
    if (capacity.DaysOff.Any())
    {
        Console.WriteLine("休假记录:");
        foreach (var dayOff in capacity.DaysOff)
        {
            Console.WriteLine($"- {dayOff.Start.Date} 至 {dayOff.End.Date}");
        }
    }
    Console.WriteLine("---");
}

单独获取用户全局休假(非迭代绑定)

如果需要获取用户在TFS中的全局休假(不是针对某个迭代的),官方客户端库没有直接封装对应的API,不过可以通过调用TFS的REST API来实现,这里复用已有的VssConnection身份验证:

var httpClient = connection.GetClient<HttpClient>();
var userId = "user-guid-or-email";
var restUrl = $"{tfsUri}/_apis/calendar/users/{userId}/events?api-version=6.0-preview.1";
var response = await httpClient.GetAsync(restUrl);
response.EnsureSuccessStatusCode();
var vacationEvents = await response.Content.ReadAsStringAsync();
// 解析返回的JSON数据即可得到用户的休假日历事件

注意事项

  • 确保你的PAT(个人访问令牌)拥有Work Item Read和Team Settings Read权限;
  • 该方案适用于TFS 2018及以上版本,以及Azure DevOps Server;
  • 如果找不到迭代或容量数据,先检查团队是否已配置迭代和成员容量设置(在TFS网页端的团队设置里确认)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:55:52