Pull to refresh

Расширение функциональности Visual Studio

Reading time 9 min
Views 25K
Дисклэймер

Сразу оговорюсь. Всё написанное здесь исключительно моё имхо. Я могу ошибаться и буду рад, если вы меня поправите :)

Буду использовать жаргонизмы и варваризмы, потому что пишу на русском, а русских аналогов нужных терминов нет или они не совсем точно передают смысл.

Ладно, к делу.

Данная статья имеет задачу в первом приближении проинформировать интересующихся о возможностях расширения функционала Visual Studio — «технологии» Visual Studio Extensibility.

Visual Studio Extensibility


Как известно, Microsoft Visual Studio — среда для разработки (IDE). Причём расширяемая среда.

В связи с тем, что среда непростая, имеет продолжительную историю и позволяет реализовывать серьёзные вещи на своей основе, появился термин Visual Studio Extensibility (VSX), который объединяет в себе всё, что относится к расширению функционала студии (буду называть её так).

Студия имеет уже десятилетнюю историю. Она была создана в COM-времена (я знаю, что они не прошли) для COM-разработки. Потом изменила своё основное предназначение на .NET-разработку. Но осталась COM-based-приложением, поэтому основная расширяемость непосредственно связана с её COM-природой. Для неё, расширяемости, используется .NET- и COM-интероперабельность. Это, несомненно, привносит в процесс расширения увлекательность и некий шарм (небольшая доля сарказма).

Ядро студии от версии к версии остаётся в основном тем же, что и у 2002-й версии, а большинство новых возможностей (VS2005, VS2008 и VS2010) реализованы с использованием мощи VSX.

К сожалению, разработчику, который будет работать с VSX, придётся столкнуться с «очаровательным кодом», который разрабатывался на протяжении нескольких лет разными людьми, и перерабатывался множество раз. А если учесть природу студии и, возможно, сжатые сроки её разработки, можно представить сколько интересного и удивительного разработчик может увидеть. Всё к тому же сожалению, именование сущностей тоже несколько хромает.

И, наконец, такой аспект, как наличие обширной и понятной документации, а точнее её отсутствие, рождает непонятное и магическое влечение к использованию VSX профессиональными разработчиками. Что может быть увлекательнее, чем исследование уже реализованных решений и изобретение новых на их основе?

Зачем расширять студию?


Собственно, зачем нам может понадобится расширение студии? Если подумать, то можно обнаружить множество решений, основанных на VSX, которые мы (имею в виду дотнетчиков) используем в повседневной жизни. WPF, Silverlight и XAML, WCF, LINQ, Tools for Office, Crystal Reports, Workflow Foundation, тестовые проекты — разработки от MS, которые в более ранних версиях студии отсутствовали, но потом появились благодаря прогрессу. Далее — собственно VSX, который, получается, основан на себе самом и включающий Integration package, DSL Tools и другие штуки. Известные ReSharper, AnkhSVN, XMLSpy и GhostDoc. Возможно, менее известные CodeRush, TestDriven.NET, Smart Paster. Небазовые для .NET языки F#, IronPython, IronRuby, PHP. Всё это вещи в той или иной степени основанные на VSX.

Сразу стоит заметить: расширение студии доступно в двух вариантах — Isolated Mode и Integrated Mode. Различие тут в том, что само ядро студии и её API доступно всегда, но функционал, который присутствует в обычной студии будет доступен только в интегрированном режиме (например, сишарп и вижуал-бейсик, веб-проекты, всяческие окна и инструменты). В изолированном мы получим исключительно оболочку, шелл.

XNA Game Studio, Microsoft Robotics Studio, SQL Server Management Studio, Microsoft Visual Studio Macros — первые, пришедшие в голову продукты, реализованные на основе изолированного шелла. Так же, вся линейка Express-студий: Visual Basic 2008 Express Edition, Visual Web Developer 2008 Express Edition, Visual C++ 2008 Express Edition, Visual C# 2008 Express Edition, — думаю, имеет те же корни.

Нa Хабре, кстати, были публикации о примерах использования VSX:
Теперь, надеюсь, немного более понятно зачем расширять студию. Видится мне, что VSX полезная штука, особенно учитывая то, что он и сам развивается. Новая Visual Studio 2010 должна быть более дружелюбной к тем, кто планирует заняться расширением. Как минимум, по причине того, что .NET Framework 4.0 будет включать в себя Managed Extensibility Framework (как напомнил хабраюзер Vladek).

Важно отметить, что расширения в интегрированном режиме доступны только в неэкспресс-версиях. Т. е. в бесплатных версиях невозможно установить никаких расширений. Зато этот интегрированный режим можно использовать для создания и внедрения новых языков программирования, дополнительного инструментария разработки в уже приобретённую и установленную студию. Примеры языков и технологий были выше.

Если же мы хотим обойтись без приобретения дорогостоящей копии Visual Studio Standard, Professional или версии Team System, то специально для нас есть бесплатный Visual Studio Isolated Shell, который можно использовать для создания своих стендэлон-продуктов, например специфических редакторов.

Возможности VSX


Возможности расширения 2008-й версии, так же как и 2005-й, включали в себя три основных варианта:
  • макрос (macros),
  • надстройка (add-in),
  • пэкедж (integration package).
Насколько я понимаю, 2010-я студия и новый SDK пока ничего другого в этот список не привнесли.

Вернёмся к расширениям. Макросы и надстройки доступны всегда, но создание пэкеджей требует наличие Visual Studio SDK.

Для того чтобы получить полную отдачу от VS SDK лучше сначала поставить VS 2008 SDK 1.0, а уже потом VS 2008 SDK 1.1. В 1.1 по какой-то причине отсутствует Project Base, о котором будет рассказано позже.

В общем, после установки VS SDK появится возможность создавать надстройки и пэкеджи, а после установки Visual Studio 2008 Shell (isolated mode) with SP1 — VS Shell-based-решения. Отмечу, что изолированный шелл существует в десяти локализациях.

Исключительно тремя вариантами VSX ограничивается только технически. А так, есть ещё и визуалайзеры (Visualizers), окна (Tool Window), проекты (Project Templates), MSBuild-расширения, DSL Tools и уже упомянутый VS Shell Isolated.

Теперь по порядку:
  • Макросы. Позволяют записывать действия для их дальнейшего повторения, т. е. позволяют программно их автоматизировать. Написание макросов ограничено вижуал-бэйсиком (VB.NET).
  • Надстройки. Надстройки — не просто код. Надстройка интегрируется в оболочку в виде скомпилированного COM-компонента (который является обычной .NET-сборкой) и имеет практически полный доступ к среде и её API.
  • Пэкеджи. Позволяют полностью интегрироваться в оболочку, как и надстройки, но в дополнение предоставляют возможность создавать собственные типы проектов и интегрировать новые языки программирования.

MPF


Основой VSX является Managed Package Framework (MPF). Он позволяет создавать пэкеджи с управляемым кодом. MPF содержит инкапсулированные имплементации множества интерфейсов пэкеджей, что позволяет обходиться меньшим количеством кода для создания собственных пэкеджей.

MPF-неймспейсы


Следующий список неймспейсов становится доступен после установки SDK:
Неймспейс Описание
Microsoft.VisualStudio Классы для работы с COM-ошибками, константам студии и вин32-окнами
Microsoft.VisualStudio.Package Обёртки из управляемого кода для проектов студии, редакторов кода и MSBuild
Microsoft.VisualStudio.Package.Automation Обёртки для объектов автоматизации
Microsoft.VisualStudio.Shell Базовые классы MPF, имплементирующие множество основных объектов студии, от которых можно наследоваться
Microsoft.VisualStudio.Shell.Design Расширения дизайнеров
Microsoft.VisualStudio.Shell.Design.Serialization Расширения сериализации дизайнеров
Microsoft.VisualStudio.Shell.Design.Serialization.CodeDom CodeDOM-расширения дизайнеров
Microsoft.VisualStudio.Shell.Flavor Поддержка подтипов проектов

VSXtra


По словам создателя этого инструментария (VSXtra) разработка пэкеджей стала намного легче, чем была. При помощи использования множества обёрток, других паттернов и прочего он приложил усилия, чтобы скрыть COM-природу студии и «шизофренического состояния» разработчика, требуемого для работы с COM через .NET.

Проблемы, решаемые VSXtra:
  • неполное покрытие ключевых сервисов студии в MPF;
  • необходимость написания огромного количества дополнительного кода (тысячи строк для реализации реальных расширений);
  • использование устаревших подходов, отсутствие дженериков и LINQ.
В общем, он обернул MPF, дореализовав то необходимое, чего не реализовали, причём обёртка эта достаточно современна и гармонична.

Главная задача этого продукта подтолкнуть команду разработчиков студии к созданию нового современного MPF. Ну, а побочная — помочь разработчикам и развлечь своего автора.

Visual Studio 2010 SDK


Visual Studio 2010 SDK содержит несколько новых элементов, которые упрощают разработку расширений:
  • шаблоны создания окон и команд;
  • новый набор шаблонов расширений редактора;
  • новые билд-таски для создания VSIX-манифестов и VSIX-контейнеров, которые можно загрузить в Visual Studio Gallery, позволяющую расшарить ваше расширение;
  • редактор VSIX-манифестов;
  • пустой VSIX-проект, который позволит завернуть в VSIX-контейнер уже существующие проекты расширений.
Что изменилось:
  • DSL Tools вынесены за пределы SDK и теперь доступны в самой студии;
  • примеры SDK доступны только онлайн;
  • документация SDK доступна только онлайн;
  • улучшение процесса разработки расширений;
  • добавление дополнительных шаблонов проектов для расширений;
  • создание дополнительных инструментов создания и отладки расширений;
  • появляются дополнительных примеров создания расширений для десятой студии.
Visual Studio 2010 SDK даёт возможность осуществлять несколько новых типов расширений в дополнение к предыдущей версии:
  • использование пэкеджей совместно с Managed Extensibility Framework;
  • расширение функциональности дизайнера данных;
  • интеграция с системами управления версиями;
  • кастомизация дебаггера или создание нового;
  • создание инструментов для тестирования.

Использование пэкеджей и MEF для расширения возможностей студии


Редактор студии создан на основе пэкеджа, дополненного несколькими MEF-расширениями. Для расширения функциональности редактора можно создавать эти расширения самостоятельно.

Visual Studio SDK включает в себя инструменты и документацию, которая помогает создавать пэкеджи и MEF-расширения, используя C#, Visual Basic или Visual C++.

Дополнительная информация: Getting Started with the Visual Studio Integration SDK, Developing Visual Studio Extensions.

Расширение функциональности дизайнера данных для работы с внешними источниками


Расширение возможностей дизайнера данных (Data Designer Extensibility, DDEX) позволяет работать с множеством внешних источников данных в режиме разработки. Иерархии этих источников отображаются в сервер-эксплорере (Server Explorer). DDEX даёт возможность получить драг-н-дроп функциональность по отношению к внешним источникам данных, работать с видимостью свойств и другие возможности дизайнеров студии.

DDEX SDK предоставляет документацию, примеры и прочую информацию для помощи в создании собственных DDEX-провайдеров.

Дополнительная информация: Data Designer Extensibility Architecture, Data Designer Extensibility (DDEX) SDK.

Интеграция с системами управления версиями


Студия поддерживает два типа интеграции: плагин, созданный на основе соответствующего апи (Source Control Plug-in API, известный раньше как MSSCCI API), и предоставляющий базовую функциональность; решение, основанное на пэкеджах, с более широкими возможностями.

Дополнительная информация: Source Control Integration Overview, Creating a Source Control Plug-in, Creating a Source Control VSPackage.

Кастомизация или создание дебаггеров


SDK позволяет кастомизировать компоненты студии, предназначенные для отладки или же создавать собственные компоненты для интеграции в IDE.

В студии отладка происходит вне процесса отлаживаемого приложения. Появилась возможность создания своих компонентов, которые взаимодействуют с дебаггером, но не влияют на отлаживаемое приложение.

Для использования Visual Studio Debugging SDK необходимо разбираться в:
  • самой среде студии (Visual Studio IDE);
  • C++;
  • ATL COM.
Дополнительная информация: Getting Started with Debugger Extensibility.

Создание инструментов для тестирования


Студия включает в себя инструментарий для тестирования, который глубоко интегрирован с другими возможностями среды. Инструментарий работает не только со своим собственным тестировочным фреймворком, но так же и с фреймворком инструментария жизненного цикла программного обеспечения.

Эти инструменты позволяют создавать, управлать, редактировать и запускать ручные и автоматические тесты, сохраняя результаты тестирования. Имеется возможность создавать собственные типы тестов.

Дополнительная информация: Testing the Application, Customizing for Testing By Using the Visual Studio SDK.
Tags:
Hubs:
+25
Comments 21
Comments Comments 21

Articles