我试图想出一个办法来找到有关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
属性,它确实给我,这是关系到代码评审,在“关联语境”搁置一些有用的信息。 利用这些信息,我可以查询搁置:
var versionStore = tfs.GetService<VersionControlServer>();
var shelveset = versionStore.QueryShelvesets("someCodeReviewId_xxxx","someUserName");
这给了我一个ShelveSet
的项目,但是这就是我卡住。
我看着到Microsoft.TeamFoundation.CodeReview
双方提供的命名空间Microsoft.TeamFoundation.CodeReview.Components
和Microsoft.TeamFoundation.CodeReview.Controls
库,但是这并不能帮助我进一步两种。
我的问题是:我如何才能找到一个代码审查期间搁置提出的实际意见(包括一般性意见和文件的注释)通过TFS API?
我没有代码示例,但根据这次讨论 ,你应该能够获得代码审查意见与功能Microsoft.TeamFoundation.Discussion.Client命名空间。
具体的意见都可以通过访问DiscussionThread类。 你应该能够查询使用讨论IDiscussionManager 。
我们有一个新的需求拉动从TFS代码审查意见,这里是什么,我们实现了一个简单的例子。 所述workItemId必须通过另一种方法进行查询。 你甚至可以看看它在Visual Studio中或通过UI一个TFS查询。 这是可用的和我们所使用的一小部分。 我发现这个链接是通过MSDN挖掘后有帮助的 。
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; }
}
文章来源: Using TFS API, how can I find the comments which were made on a Code Review?