Как я могу открыть диалоговое окно сведений о наборе изменений TFS с помощью надстройки Visual Studio?

У меня есть определенный артефакт в TFS, скажем, набор изменений «123», который имеет URI «vstfs: /// VersionControl / Changeset / 123». Я понял, что ссылка "http://tfs:8080/tfs/web/UI/Pages/Scc/ViewChangeset.aspx?changeset=123 " откроет подробное представление набора изменений с помощью веб-браузера.

Что я хотел бы сделать, так это открыть подробное представление набора изменений в Visual Studio. Я встраиваю это в специальный раздел в сводке сборки. Я реализовал этот настраиваемый раздел как плагин VisualStudio. Вот картинка:

введите описание изображения здесь

Раздел «Сборка выпуска» сделан на заказ и предоставит информацию об электронном письме, которое будет отправлено всем, как только такая сборка будет выпущена.

Набор изменений 627 внутри этого раздела представляет собой элемент управления Button, который автоматически преобразован в ссылку. "Click" -Handler за кнопкой работает. В настоящее время код выглядит так:

...
string link = buildDetailView.TeamProjectCollection.Uri.AbsoluteUri.Substring(0, buildDetailView.TeamProjectCollection.Uri.AbsoluteUri.LastIndexOf('/'));
link += "/web/UI/Pages/Scc/ViewChangeset.aspx?changeset=";
link += ((Button)sender).Content;

Process.Start(new ProcessStartInfo(link));
e.Handled = true;
...

Этот код откроет новую вкладку браузера и покажет правильную страницу. Однако я хотел бы, чтобы он открывал детали набора изменений внутри Visual Studio. Точно так же, как кнопка внизу в разделе «Связанные наборы изменений». Когда вы щелкаете ссылку «Набор изменений 627», он откроет этот набор изменений внутри Visual Studio.

ИЗМЕНИТЬ 1

Будет немного яснее, каков именно желаемый результат, если я опубликую его фотографию. Окно «Детали набора изменений» - это то, что я хотел бы открыть с помощью API.

введите описание изображения здесь


person Christian    schedule 17.01.2012    source источник
comment
Я не уверен на 100%, и у меня нет кода прямо здесь, где я делал что-то подобное, но я думаю, вам нужно взглянуть на Visual Studio SDK. Я постараюсь не забыть взглянуть на свой старый код сегодня вечером, если вы не получили ответа до тех пор.   -  person Feroc    schedule 17.01.2012
comment
@Feroc спасибо, посмотрю SDK.   -  person Christian    schedule 17.01.2012
comment
+1: Очень интересно. Я добавил в решение простой TXT-файл, содержащий вашу ссылку http://tfs:8080/tfs/web/UI/Pages/Scc/ViewChangeset.aspx?changeset=123". Когда я открыл его в IDE, он открыл набор изменений с помощью CTRL + щелчок в VS - как и вам нужно. Это и ваш случай? Если нет - это надо отслеживать в контекстных VS-настройках.   -  person pantelif    schedule 17.01.2012
comment
@pantelif Я сделал то же самое - для меня он открывает детали набора изменений внутри новой вкладки браузера (которая находится внутри Visual Studio). Я искал не вкладку браузера, а элемент исходного пользовательского интерфейса. Я отредактирую свой вопрос и предоставлю изображение желаемого пользовательского интерфейса.   -  person Christian    schedule 17.01.2012


Ответы (2)


Взгляните на следующие сообщения в блоге:

По сути, вам понадобятся ссылки на следующие сборки:

 Microsoft.TeamFoundation.Client
 Microsoft.TeamFoundation.VersionControl.Client
 Microsoft.TeamFoundation.VersionControl.Controls
 Microsoft.VisualStudio.TeamFoundation
 Microsoft.VisualStudio.TeamFoundation.Client
 Microsoft.VisualStudio.TeamFoundation.VersionControl

Затем вы можете использовать VersionControlExt.ViewChangesetDetails(int changesetId) для отображения определенного набора изменений из надстройки:

VersionControlExt vce;
vce = _applicationObject.GetObject("Microsoft.VisualStudio.TeamFoundation.VersionControl.VersionControlExt") as VersionControlExt;
vce.ViewChangesetDetails(changesetId);

Это вызывает диалоговое окно, которое показывает пользователю все подробности о конкретном наборе изменений. (Это тот же самый диалог, который появляется, если пользователь выбирает «Подробности ...» в диалоговом окне «Найти наборы изменений».)

person Grant Holliday    schedule 17.01.2012
comment
Большое спасибо за этот хороший пример. Работает отлично! Спасибо - person Christian; 17.01.2012

В VS 2015 вы можете использовать следующий код, взятый из здесь

public void ViewChangesetDetails(int changesetId)
{
        ITeamExplorer teamExplorer = this.GetService<ITeamExplorer>();
        if (teamExplorer != null)
        {
            teamExplorer.NavigateToPage(new Guid(TeamExplorerPageIds.ChangesetDetails), changesetId);
        }
}
person Mohsen Afshin    schedule 23.05.2017