使用 TFS API,如何找到代码审查中的评论?

2024-01-06

我正在尝试找出一种方法来查找有关 TFS2012 中代码审查请求/响应项目的详细信息。

我可以通过以下方式查询所有代码审查请求/响应项目:

const string TfsUri = "http://mytfsserver:8080/tfs/Default ProjectCollection";

var tfs = new TfsTeamProjectCollection(new Uri(TfsUri));
var store = tfs.GetService<WorkItemStore>();

var versionStore = tfs.GetService<Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer>();

var queryText = "SELECT [System.Id], 
                 FROM WorkItems 
                 WHERE [System.WorkItemType] = 'Code Review Request' 
                 or [System.WorkItemType] = 'Code Review Response'";
var query = new Query(store, queryText);

var result = query.RunQuery().OfType<WorkItem>();

这给了我一个列表WorkItem类型。当我循环result.FirstOrDefault().Fields属性,它确实为我提供了一些有关 ShelveSet 的有用信息,这些信息与代码审查(“关联上下文”)相关。使用此信息,我可以查询 ShelveSet:

var versionStore = tfs.GetService<VersionControlServer>();
var shelveset = versionStore.QueryShelvesets("someCodeReviewId_xxxx","someUserName");

这给了我一个ShelveSet项目,但这就是我陷入困境的地方。

我已经调查过Microsoft.TeamFoundation.CodeReview两者都提供的命名空间Microsoft.TeamFoundation.CodeReview.Components and Microsoft.TeamFoundation.CodeReview.Controls图书馆,但这也没有进一步帮助我。

我的问题是:如何通过 TFS API 找到代码审查期间对 ShelveSet 所做的实际注释(一般注释和文件注释)?


我们有一个新要求,需要从 TFS 中提取代码审查注释,下面是我们实现的一个简短示例。 workItemId 必须通过另一个方法来查询。您甚至可以在 Visual Studio 中或通过 UI 中的 TFS 查询进行查找。这是可用的和我们正在使用的一小部分。我发现在浏览 MSDN 后此链接会有所帮助 http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.discussion.client.teamfoundationdiscussionservice.creatediscussionmanager.aspx.

 public List<CodeReviewComment> GetCodeReviewComments(int workItemId)
 {
        List<CodeReviewComment> comments = new List<CodeReviewComment>();

        Uri uri = new Uri(URL_TO_TFS_COLLECTION);
        TeamFoundationDiscussionService service = new TeamFoundationDiscussionService();
        service.Initialize(new Microsoft.TeamFoundation.Client.TfsTeamProjectCollection(uri));
        IDiscussionManager discussionManager = service.CreateDiscussionManager();

        IAsyncResult result = discussionManager.BeginQueryByCodeReviewRequest(workItemId, QueryStoreOptions.ServerAndLocal, new AsyncCallback(CallCompletedCallback), null);
        var output = discussionManager.EndQueryByCodeReviewRequest(result);

        foreach (DiscussionThread thread in output)
        {
            if (thread.RootComment != null)
            {
                CodeReviewComment comment = new CodeReviewComment();
                comment.Author = thread.RootComment.Author.DisplayName;
                comment.Comment = thread.RootComment.Content;
                comment.PublishDate = thread.RootComment.PublishedDate.ToShortDateString();
                comment.ItemName = thread.ItemPath;
                comments.Add(comment);
            }
        }

        return comments;
    }

    static void CallCompletedCallback(IAsyncResult result)
    {
        // Handle error conditions here
    }

    public class CodeReviewComment
    {
        public string Author { get; set; }
        public string Comment { get; set; }
        public string PublishDate { get; set; }
        public string ItemName { get; set; }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 TFS API,如何找到代码审查中的评论? 的相关文章

  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 使用 Python 请求将文件数据放入 Autodesk API

    我正在按照描述的过程进行操作here https developer autodesk com en docs data v2 tutorials upload file 但被一个人拦住了403在第 4 步 我有一个令牌data write
  • GCC优化技巧,真的有效吗?

    在查看一些有关优化的问题时 这接受的答案 https stackoverflow com questions 2074099 coding practices which enable the compiler optimizer to m
  • WPF线程和GUI如何从不同线程访问对象?

    我有一个线程调用一个从互联网获取一些东西的对象 当该对象填满所需的所有信息时 它会引发一个事件 其中对象将包含所有信息 该事件由启动线程的控制器消耗 然后 从事件返回的对象被添加到通过视图模型方法绑定到 GUI 的集合中 问题是我无法将 C
  • 从另一个jar文件访问资源

    我有一个简单的结构 一个包含一批数据的数据 jar 文件和一个使用数据运行服务的服务 jar 文件 为了使数据易于替换 我将它们分开 并且 service jar 的类路径包含 data jar 所在的目录 在 service jar 中
  • 如何在 gitlab 中为多分支管道 jenkins 添加 webhook

    我想为每次推送触发多分支管道 任何人都可以告诉我如何在 gitlab 中配置 web hooks 来实现多分支管道 如果您想知道触发器设置在多分支管道作业设置中的位置 这将回答它 与其他作业类型不同 多分支作业配置不需要 触发器 设置 只需
  • 如何从 Android 中的 PreferenceActivity 获取 SharedPreferences?

    我正在使用 PreferenceActivity 来显示我的应用程序的一些设置 我通过 xml 文件扩充设置 以便我的 onCreate 和完整的类方法 如下所示 public class FooActivity extends Prefe
  • Yolo 暗网仅检测特定类别,如人、猫、狗等

    我们使用 YOLO Darknet 进行对象检测 我们使用Python3 tensorflow 1 0 numpy opencv 3 使用yolo weight进行检测 根据下面的链接给出 https github com thtrieu
  • 如何忽略文件夹而不将其从我的存储库中删除

    我有 tmp 和 cache 目录 它们不断生成不需要提交的文件 我如何设置它以便 svn 忽略它们 但不删除它们或从存储库中删除它们 站点需要它们才能工作 cd path to app tmp svn propset svn ignore
  • 请求重试之间的超时 Apache HttpClient

    有人可以分享如何配置现代 HttpClient 4 5 3 以重试失败的请求并在每次重试之前等待一段时间吗 到目前为止看来我的理解是正确的 setRetryHandler new DefaultHttpRequestRetryHandler
  • php is_file 总是返回 false

    php is file 总是返回 false apache h185 default ls l home www default p php rwxr xr x 1 zhouhh zhouhh 50837 Aug 28 19 02 home
  • EC2 Amazon Linux AMI MySQL CPU @ 62% 空闲时?

    我在 Amazon Linux AMI 上运行 MySQL 没有任何东西与之相关 没有连接 也没有其他正在运行的使用 MySQL 的应用程序 它完全闲置了 但是 top报告 mysql 使用 62 的 CPU 为什么会发生这种情况以及如何解
  • 在android中创建全局函数

    我想要做的是创建一个具有各种功能的java文件 我想在整个项目中使用它 例如检查互联网连接 然后我想在每个活动上调用该函数 有谁知道这是怎么做到的吗 像这样创建类并在此处添加您的函数 package com mytest import an
  • 傻瓜线程队列

    我认为这是一个非常常见的线程场景 我有 100 份相同的工作需要完成 所有工作都是独立的 其他 我想最多处理 一次 15 个职位 正如每一份工作 完成后 将开始新的工作 直到所有作业完成 如果您假设每个作业完成时都会触发一个事件 我使用的是
  • R 中的 sqlquery 不返回查询中的所有行

    我正在 R 中执行以下命令 dbhandle lt odbcDriverConnect driver SQL Server server serveripaddress database DBName uid sa pwd pwd Fact
  • 获取 Finder 中所选文件的路径

    如何检索 Finder 中所选文件的路径数组 我四处搜索 但只找到了有关 AppleScript 的链接 我也看过NSWorkspace and NSFileManager但我没有找到任何东西 扩展 Bvarious 的 正确 答案 以下是
  • 如何在 Windows 终端中运行可执行文件?

    我想运行一个可执行文件Windows 终端 https github com microsoft terminal 像这样的事情 wt exe myConsoleApp exe 但这只会打开终端本身 让终端成为所有人的默认终端ps1 bat
  • 如何使用Retrofit同时发送图像和文本

    我想使用改造同时发送此 Postdata 和图像文件 PostData and Point public class PostData implements Serializable Expose private String text E
  • Model.find() 不再接受 Mongoose 中的回调

    我目前正在从 Angela Yu 博士的课程中学习 Mongoose 但是由于 mongoose 改变了 find 和其他几个函数的语法 所以它抛出了上述错误 这是 JavaScript 代码 const express require e
  • 使用 iPhone 5 和 Xcode 4.2 的核心图 1.0 - 'CorePlot0' 不包含有效的 pid 编译错误

    我已按照以下安装步骤进行操作应用程序中的核心情节 http code google com p core plot wiki UsingCorePlotInApplications网址 正如主题中所定义的 核心绘图版本是 1 0 已在 Xc
  • 使用 TFS API,如何找到代码审查中的评论?

    我正在尝试找出一种方法来查找有关 TFS2012 中代码审查请求 响应项目的详细信息 我可以通过以下方式查询所有代码审查请求 响应项目 const string TfsUri http mytfsserver 8080 tfs Defaul