Погружение в Visual Studio 2012 Team Explorer

Грэг Дункан

Сегодняшнее сообщение отличается от обычных сообщений этого блога, но я решил, что оно занятное и принадлежит к сфере, в которой не много разработчиков (пока). Может быть, оно побудит некоторых из вас присоединиться к ней!

Может, вы знаете, а может, и нет, что я являюсь регулярным соведущим передач RadioTFS. Одной из моих функций является подбор историй о Team Foundation Server/Service, Visual Studio, ALM и т.п., чтобы рассказывать о них, и как вы можете сообразить, тут-то я и нашел сегодняшний проект.

Не знаю, как вы, а я довольно много времени провожу в Visual Studio, а также являюсь постоянным пользователем Team Foundation Server/Service/CodePlex.

Если вы перешли на Visual Studio 2012 и используете TFS/CodePlex, то уже видели новый Team Explorer. Но знаете ли вы, насколько расширяемым он является?

Расширение Team Explorer в Visual Studio 2012

Team Explorer в Visual Studio 2012 предлагает множество возможностей для расширения квалификации пользователя. Этот пример демонстрирует несколько путей расширения с помощью добавления новой страницы Team Explorer, а также новой секции на странице Pending Changes:

  • Добавление новой страницы «Последние изменения» в Team Explorer с двумя секциями.
  • Добавление секции «Информация о выбранном файле» во встроенную страницу «Отложенные изменения».
  • Добавление ссылки «Последние изменения» в элемент «Отложенные изменения».

Построение примера

Для этого примера требуется Visual Studio 2012 и Visual Studio 2012 SDK. Откройте решение и нажмите F5 для запуска и отладки.

...

В этом примере прекрасно то, что всё правильно работает с первого раза, даже при открытии Visual Studio в «экспериментальном» режиме.

Поэтому, если вы получаете сообщения об ошибках "The application which this project type is based on was not found", или проект не загружается, или "This Project is not compatible with this version of Visual Studio" (по которым я … тоскую), то возможно, вам требуется установить Visual Studio 2012 SDK. Самую последнюю версию которого можно получить из Visual Studio Developer Center > Extend Visual Studio > Download the Visual Studio 2012 SDK.

После установки SDK, решение и проект должны загрузиться и при старте запустить еще один экземпляр Visual Studio с загруженными расширениями.

Так что же с ним можно делать? По вкусу:

Расширяемость Team Explorer

Страницы и секции

Единым представлением в Team Explorer является страница (ITeamExplorerPage). Она может предоставлять элементы управления WPF, размещаемые наверху клиентской области, но это не обязательно. Две страницы не могут иметь одинаковый ID в Team Explorer.

Страница может содержать одну или несколько секций (ITeamExplorerSection), упорядоченных по приоритету. Секция также предоставляет элементы управления WPF, составляющие ее пользовательский интерфейс. Секции на странице могут быть авторские или сторонних поставщиков.

Главная страница – элементы навигации и ссылки

Главная страница – это специальная страница Team Explorer со своей собственной расширяемостью. Она содержит список элементов навигации (ITeamExplorerNavigationItem) и ссылок навигации (ITeamExplorerNavigationLink). Список плагинов элементов навигации используется как для главной страницы, так и для элемента навигации Team Explorer наверху окна.

Интерфейсы плагинов

Плагин должен реализовывать интерфейс предоставляемого расширения. Интерфейсы описаны в пространстве имен Microsoft.TeamFoundation.Controls библиотеки Microsoft.TeamFoundation.Controls.dll.

Страница:
ITeamExplorerPage

Секция:
ITeamExplorerSection

Элемент навигации:
ITeamExplorerNavigationItem

Ссылка навигации:
ITeamExplorerNavigationLink

Но что конкретно делает этот пример?

  • Добавление новой страницы "Последние изменения" с двумя секциями.
  • Добавление новой секции "Информация о выбранном файле" на встроенную страницу “Отложенные изменения”.
  • Добавление ссылки навигации "Последние изменения" в элемент навигации “Отложенные изменения”.

А, экраны? Вот некоторые до и после установки плагина.

Последние изменения

clip_image002

clip_image004

Информация о выбранном файле

clip_image006

clip_image008

Отложенные изменения / Последние изменения

clip_image010

Как видно, новые возможности расширяемость позволяют бесшовно добавлять новые возможности и функции в новом Team Explorer.

Как это работает? На базе MEF, конечно!

Обнаружение плагинов

Обнаружение плагинов для Team Explorer выполняется с помощью MEF. Сборка, содержащая плагины должна устанавливаться в один из каталогов для расширений Visual Studio, и должна сопровождаться файлом extension.vsixmanifest, описывающим MEF-компоненты, предоставляемые сборкой. Рекомендуемый механизм запаковки – с использованием VSIX и Visual Studio Extension Gallery.

Есть параметр класса для каждого типа плагина, который экспортирует плагин для обнаружения проводником Team Explorer. Этот параметр определен пространстве имен Microsoft.TeamFoundation.Controls библиотеки Microsoft.TeamFoundation.Controls.dll.

Страница:
[TeamExplorerPage("guid")]

Секция:
[TeamExplorerSection("guid", "parentPageGuid", priority)]

Элемент навигации:
[TeamExplorerNavigationItem("guid", priority)]

Ссылка навигации:
[TeamExplorerNavigationLink("guid", "parentNavigationItemGuid", priority)]

Но Грег, как насчет влияния таких плагинов на Visual Studio? Я не хочу вернуться в старые времена, когда распухающие расширения напрочь убивали производительность!

Время жизни плагина

Ни страница, ни секция не будут обрабатываться, пока пользователь не обратится к ним в первый раз. После этого страница и все ее секции обрабатываются и инициализируются в порядке приоритета. Станица или секция инициализируется лишь один раз на протяжении своей жизни. Метод инициализации получает соответствующее время для выполнения запросов ко всем сервисам и проведения инициализации всех дочерних элементов управления. EventArgs обеспечивает IServiceProvider, как дополнительное содержимое начальной страницы.

Чтобы эффективно управлять памятью, в ней в любой момент времени находится только текущая страница. Когда пользователь переходит на другую страницу, текущая вызывает метод SaveContext, чтобы сохранить окружение, а затем закрывается. В разделе «Управление контекстом» более подробно обсуждается, как управляются объекты контекста.

Что насчет управления контекстом? Освещено. Общая информация: данные, выбор, и т.п.? Освещено. Навигация, предупреждения? Освещено.

Так, а сколько кода здесь есть? Вот снимок решения.

clip_image012

Ссылки?

clip_image014

Итак, вы хотя бы заинтересовались? Хотите еще информации? Вот отправная точка для всех расширений Team Foundation (и клиента и сервера).

Если вы создадите замечательное расширение для Team Explorer, сообщите нам ch9@microsoft.com!