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

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

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

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

Данная статья имеет задачу в первом приближении проинформировать интересующихся о возможностях расширения функционала 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:

  • Навигатор по проектам для Visual Studio;
  • Помощь в отладке для Visual Studio - Debugger Visualizers;
  • ScottGu о VS 2010 и .NET 4.0: шаблоны проектов в VS 2010.

Теперь, надеюсь, немного более понятно зачем расширять студию. Видится мне, что 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 Beta SDK

Visual Studio 2010 Beta SDK содержит несколько новых элементов, которые упрощают разработку расширений:

  • шаблоны создания окон и команд;
  • новый набор шаблонов расширений редактора;
  • новые билд-таски для создания VSIX-манифестов и VSIX-контейнеров, которые можно загрузить в Visual Studio Gallery, позволяющую расшарить ваше расширение;
  • редактор VSIX-манифестов;
  • пустой VSIX-проект, который позволит завернуть в VSIX-контейнер уже существующие проекты расширений.

Что изменилось:

  • DSL Tools вынесены за пределы SDK и теперь доступны в самой студии;
  • примеры SDK доступны только онлайн;
  • документация SDK доступна только онлайн.

На бэте работа над SDK конечно же не закончена. Дальше будет следующее:

  • улучшение процесса разработки расширений;
  • добавление дополнительных шаблонов проектов для расширений;
  • создание дополнительных инструментов создания и отладки расширений;
  • продолжение создания дополнительных примеров создания расширений для десятой студии.

Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=23248