Расширение функциональности Visual StudioИсточник: mhabrahabr
Сразу оговорюсь. Всё написанное здесь исключительно моё имхо. Я могу ошибаться и буду рад, если вы меня поправите :) Буду использовать жаргонизмы и варваризмы, потому что пишу на русском, а русских аналогов нужных терминов нет или они не совсем точно передают смысл. Ладно, к делу. Данная статья имеет задачу в первом приближении проинформировать интересующихся о возможностях расширения функционала 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Возможности расширения
Насколько я понимаю, 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. Теперь по порядку:
MPFОсновой VSX является Managed Package Framework (MPF). Он позволяет создавать пэкеджи с управляемым кодом. MPF содержит инкапсулированные имплементации множества интерфейсов пэкеджей, что позволяет обходиться меньшим количеством кода для создания собственных пэкеджей.
MPF-неймспейсыСледующий список неймспейсов становится доступен после установки SDK:
VSXtraПо словам создателя этого инструментария (VSXtra) разработка пэкеджей стала намного легче, чем была. При помощи использования множества обёрток, других паттернов и прочего он приложил усилия, чтобы скрыть COM-природу студии и "шизофренического состояния" разработчика, требуемого для работы с COM через .NET. Проблемы, решаемые VSXtra:
В общем, он обернул MPF, дореализовав то необходимое, чего не реализовали, причём обёртка эта достаточно современна и гармонична. Главная задача этого продукта подтолкнуть команду разработчиков студии к созданию нового современного MPF. Ну, а побочная - помочь разработчикам и развлечь своего автора.
Visual Studio 2010 Beta SDKVisual Studio 2010 Beta SDK содержит несколько новых элементов, которые упрощают разработку расширений:
Что изменилось:
На бэте работа над SDK конечно же не закончена. Дальше будет следующее:
|