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

自定义TFS签入策略中如何获取代码评审响应?

自定义TFS签入策略:快速获取代码评审反馈的方案

嘿,这个场景我之前做自定义签入策略时刚好踩过坑!其实不用费劲写WIQL查询,TFS的Client Object Model已经给我们封装好了更直接的方式来获取代码评审的反馈响应,不用自己处理工作项关联的复杂逻辑。

核心思路:利用CodeReviewRequest封装类

你已经拿到了签入关联的代码评审请求工作项,接下来可以直接把这些工作项转换成CodeReviewRequest对象,它自带方法能直接拉取对应的评审响应,省去手动查关联工作项的麻烦。

具体实现步骤

  1. 引用必要的程序集
    首先确保你的项目引用了以下两个TFS客户端组件:

    • Microsoft.TeamFoundation.CodeReview.Client.dll
    • Microsoft.TeamFoundation.Discussion.Client.dll
  2. 转换工作项为CodeReviewRequest并获取响应
    假设你已经从PendingCheckin.WorkItems.CheckedWorkItems拿到了代码评审请求的WorkItem集合,接下来可以这样处理:

    using Microsoft.TeamFoundation.CodeReview.Client;
    using Microsoft.TeamFoundation.WorkItemTracking.Client;
    
    // 遍历已关联的代码评审请求工作项
    foreach (WorkItem workItem in pendingCheckin.WorkItems.CheckedWorkItems)
    {
        // 只处理代码评审请求类型的工作项
        if (workItem.Type.Name == "Code Review Request")
        {
            // 将WorkItem转换为CodeReviewRequest对象
            CodeReviewRequest reviewRequest = CodeReviewRequest.FromWorkItem(workItem);
            
            // 获取该请求下所有的评审响应
            var reviewResponses = reviewRequest.GetResponses();
    
            // 接下来就可以统计和验证约束了
            int looksGoodCount = 0;
            bool hasAnnotatedFeedback = false;
    
            foreach (CodeReviewResponse response in reviewResponses)
            {
                // 统计"Looks Good"的数量(对应Approve投票)
                if (response.ReviewerVote == ReviewerVote.Approve)
                {
                    looksGoodCount++;
                }
                // 检查是否有带注释的非通过反馈
                else if (response.ReviewerVote != ReviewerVote.NotReviewed && !string.IsNullOrEmpty(response.Comments))
                {
                    hasAnnotatedFeedback = true;
                }
            }
    
            // 验证你的约束条件
            if (looksGoodCount < 3 || hasAnnotatedFeedback)
            {
                // 不满足条件,阻止签入,返回错误信息
                policyFailure.AddFailure("代码评审未满足要求:需要至少3个\"Looks Good\"反馈,且无带注释的异议反馈。", workItem);
            }
        }
    }
    

为什么这个方法更简便?

  • 不用自己编写WIQL查询语句来关联评审请求和响应工作项,封装好的GetResponses()方法直接帮你处理了关联逻辑
  • CodeReviewResponse类自带ReviewerVote、Comments等属性,不用手动解析工作项的字段值,更直观不易出错
  • 完全贴合代码评审的业务逻辑,代码可读性更高

注意事项

  • 如果是Azure DevOps Server(原TFS)的较新版本,API可能略有调整,但核心的CodeReviewRequest和CodeReviewResponse类的用法基本一致
  • 确保你的签入策略运行的账号有足够的权限读取代码评审的反馈数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:12:38