C# 使用TFSAPI,我怎样才能找到在代码评审中所做的注释?

C# 使用TFSAPI,我怎样才能找到在代码评审中所做的注释?,c#,api,object-model,tfs-code-review,C#,Api,Object Model,Tfs Code Review,我正试图找到一种方法来查找TFS2012中代码审阅请求/响应项的详细信息 我可以通过以下方式查询所有代码审阅请求/响应项: const string TfsUri = "http://mytfsserver:8080/tfs/Default ProjectCollection"; var tfs = new TfsTeamProjectCollection(new Uri(TfsUri)); var store = tfs.GetService<WorkItemStore>();

我正试图找到一种方法来查找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>();
这给了我一个
搁置集
项,但这就是我被卡住的地方

我研究了
Microsoft.TeamFoundation.CodeReview
名称空间,该名称空间由
Microsoft.TeamFoundation.CodeReview.Components
Microsoft.TeamFoundation.CodeReview.Controls
库提供,但这对我也没有帮助


我的问题是:如何通过TFS API在代码审阅期间找到搁置集上的实际注释(包括一般注释和文件注释)?

我没有代码示例,但根据,您应该能够使用命名空间中的功能访问代码审阅注释


具体来说,可以通过类访问注释。您应该能够使用查询讨论。

我们有一个从TFS中提取代码审阅注释的新需求,下面是我们实现的一个简短示例。必须通过另一个方法查询workItemId。您甚至可以在VisualStudio中或通过UI中的TFS查询来查找它。这是可用内容和我们正在使用的内容的一小部分。我找到了

公共列表GetCodeReviewComments(int workItemId)
{
列表注释=新列表();
Uri=新的Uri(指向集合的URL);
TeamFoundationDiscussionService=新的TeamFoundationDiscussionService();
初始化(新的Microsoft.TeamFoundation.Client.TfsTeamProjectCollection(uri));
IDisCustomManager discussionManager=service.CreateDiscussionManager();
IAsyncResult result=discussionManager.BeginQueryByCodeReviewRequest(workItemId,QueryStoreOptions.ServerAndLocal,新建异步回调(CallCompletedCallback),null);
var输出=discussionManager.EndQueryCodeReviewRequest(结果);
foreach(讨论输出中的线程)
{
if(thread.RootComment!=null)
{
CodeReviewComment注释=新的CodeReviewComment();
comment.Author=thread.RootComment.Author.DisplayName;
comment.comment=thread.RootComment.Content;
comment.PublishDate=thread.RootComment.PublishDate.ToSortDateString();
comment.ItemName=thread.ItemPath;
注释。添加(注释);
}
}
返回评论;
}
静态void CallCompletedCallback(IAsyncResult结果)
{
//在这里处理错误条件
}
公共类CodeReviewComment
{
公共字符串作者{get;set;}
公共字符串注释{get;set;}
公共字符串PublishDate{get;set;}
公共字符串ItemName{get;set;}
}

这正是我想要的!谢谢!我是在成千上万的代码审查请求下运行这个程序的。有没有办法加快速度?这一步需要时间:var输出=discussionManager.EndQueryCodeReviewRequest(结果);这一步对我们来说总是运行得非常快,因为它使用单个工作项Id(workItemId)作为输入参数。我们建立了一个web应用程序,列出给定标准的所有变更集,并突出显示带有代码审查的变更集。然后,我们单击每个我们想要深入研究的项目,这将导致本例中的步骤。
var versionStore = tfs.GetService<VersionControlServer>();
var shelveset = versionStore.QueryShelvesets("someCodeReviewId_xxxx","someUserName");
 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; }
    }