Usando la API TFS, ¿cómo puedo encontrar los comentarios que se hicieron en una revisión de código?

Estoy tratando de encontrar una manera de encontrar detalles sobre un elemento Solicitud / Revisión de Código en TFS2012.

Puedo consultar todos los elementos de solicitud / respuesta de revisión de código de la siguiente manera:

const string TfsUri = "http://mytfsserver:8080/tfs/Default ProjectCollection"; var tfs = new TfsTeamProjectCollection(new Uri(TfsUri)); var store = tfs.GetService(); var versionStore = tfs.GetService(); 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(); 

Esto me da una lista de tipos de WorkItem de WorkItem . Cuando result.FirstOrDefault().Fields la result.FirstOrDefault().Fields , me proporciona información útil sobre ShelveSet, que está relacionada con la revisión del código, el “contexto asociado”. Usando esta información, puedo consultar el ShelveSet:

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

esto me da un elemento ShelveSet , pero ahí es donde me quedo atascado.

He examinado el espacio de nombres Microsoft.TeamFoundation.CodeReview proporcionado por las bibliotecas Microsoft.TeamFoundation.CodeReview.Components y Microsoft.TeamFoundation.CodeReview.Controls , pero esto tampoco me sirve de nada.

Mi pregunta es: ¿cómo puedo encontrar los comentarios reales realizados en un ShelveSet durante una revisión de código (tanto comentarios generales como comentarios de archivos) a través de la API de TFS?

No tengo ejemplos de código, pero de acuerdo con esta discusión , debería poder acceder a comentarios de revisión de código con funcionalidad en el espacio de nombres Microsoft.TeamFoundation.Discussion.Client .

Específicamente, los comentarios son accesibles a través de la clase DiscussionThread . Y deberías poder consultar discusiones usando IDiscussionManager .

Tenemos un nuevo requisito para extraer comentarios de revisión de código de TFS y aquí hay un breve ejemplo de lo que implementamos. El workItemId debe ser consultado a través de otro método. Incluso puede buscarlo en Visual Studio o a través de una consulta TFS en la interfaz de usuario. Este es un pequeño subconjunto de lo que está disponible y lo que estamos usando. Encontré este enlace útil después de buscar en MSDN .

  public List GetCodeReviewComments(int workItemId) { List comments = new List(); 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; } }