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

Azure DevOps Server 2022 TFVC:如何用C#检查文件是否签出?

TFVC文件签出状态检查问题解决

问题根源

TfvcItem.IsPendingChange 属性仅用于标记当前TfvcItem是否属于未提交的挂起变更,而你通过GetItemAsync获取的是Azure DevOps Server上已提交的文件版本,这类服务器端的文件本身不存在未提交变更,所以该属性始终返回false是正常行为。

正确实现方式

要通过TfvcItem关联判断文件是否签出,需要先获取目标文件的挂起变更记录,从挂起变更中提取的TfvcItem才会正确返回IsPendingChange = true。以下是两种场景的代码示例:

1. 检查当前用户是否签出文件

// 获取当前用户针对目标文件的挂起变更
var pendingChanges = sourceControl.GetPendingChangesAsync(sSrcPath, RecursionType.None).Result;
bool isCheckedOutByMe = pendingChanges.Any();

// 若存在签出,获取对应的TfvcItem并验证IsPendingChange
if (isCheckedOutByMe)
{
    TfvcItem checkedOutItem = pendingChanges.First().Item;
    bool isPending = checkedOutItem.IsPendingChange; // 此处会返回true
}

2. 检查所有用户是否签出文件

如果需要确认文件是否被任意用户签出,可使用重载方法指定获取所有用户的挂起变更:

// 获取所有用户针对目标文件的挂起变更
var allPendingChanges = sourceControl.GetPendingChangesAsync(
    sSrcPath,
    RecursionType.None,
    workspaceName: null, // null表示所有工作区
    userName: null,      // null表示所有用户
    pendingChangeTypes: null
).Result;
bool isCheckedOutByAnyone = allPendingChanges.Any();

与旧代码的关联

你之前使用的GetPendingSets方法是获取用户的挂起变更集(包含多个文件的变更),而GetPendingChangesAsync更直接针对单个文件的挂起变更记录,两者本质都是查询未提交的变更,只是粒度不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:57:20