Vitalii Tsybulnyk / Виталий Цыбульник

On Software Development / О софтверной разработке

About the author

    Vitalii Tsybulnyk
Vitalii Tsybulnyk is a Software Engineering Manager at Mictosoft Azure.
E-mail me Send mail

Activity

Recent comments

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2008-2017

Visual Studio Isolated Shell: интегрированная среда разработчика своими руками

ВВЕДЕНИЕ 

Думаю, излишне говорить о том, как важен удобный и профессионально выглядящий пользовательский интерфейс для успеха программного продукта. Однако качественный и богатый возможностями пользовательский интерфейс - весьма дорогостоящее удовольствие. Он требует не только существенных дополнительных затрат на разработку дизайна, анализ удобства использования, но и влечёт за собой растущие в геометрической прогрессии затраты на тестирование и отладку. Один из таких классов дорогостоящих интерфейсов - это MDI (multiple document interface - многодокументный интерфейс). Разработка программного продукта с редактором файлов, удобной манипуляцией окнами, toolbox и toolwindow - это на 80% разработка интерфейса, и только на 20% разработка собственно уникальной для вашего продукта бизнес-логики. Использование таких библиотек, как MFC для С++ или Infragistics для .Net, бесспорно, очень помогает, но не спасает в такой ситуации. В данной статье я хотел бы рассказать об ещё одном, сравнительно новом подходе к созданию профессионального многодокументного пользовательского интерфейса от Microsoft под названием Visual Studio Isolated Shell.

ОСНОВНЫЕ ПРИНЦИПЫ

Visual Studio Isolated Shell представляет собой облегчённую версию оболочки Visual Studio, которую разработчик может использовать для создания собственного продукта. Т.е. в распоряжение разработчиков предлагается вся мощь Visual Studio IDE, включая меню, редактор файлов, toolbox и toolwindow, которую они могут наполнят своей собственной бизнес-логикой и получать таким образом профессиональное приложение с богатыми возможностями графического интерфейса, не уступающими лидерам рынка. У такого использования есть и своя цена - для реализации уникальной бизнес-логики внутри оболочки разработчику предоставляется ограниченный набор инструментов, предназначенный для расширения возможностей стандартной оболочки Visual Studio. Таким образом, архитектура построенного на базе Isolated Shell приложения представляет собой конгломерат из собственно самой оболочки и расширений к ней, реализующих уникальную бизнес-логику приложения. 

СОЗДАНИЕ ПРОЕКТА 

Isolated Shell впервые появилась в Visual Studio 2008, однако в этой статье я буду ссылаться на Visual Studio 2010 RC, так как в этой новой версии есть ряд усовершенствований и дополнительных возможностей. Для создания собственного проекта Isolated Shell вам понадобится Visual Studio 2010 RC Ultimate/Professional и Visual Studio 2010 SDK RC. После установки VS SDK в списке доступных проектов ('File' -> 'New' -> 'Project') появится 'Other Project Type' -> 'Extensibility' -> 'Visual Studio Shell Isolated'. Создайте этот проект - в окне сразу откроется описание "Starter Kit", которое можно использовать в качестве первого руководства в мир Isolated Shell. Если при создании проекта вы оставили название по умолчанию 'VSShellStub1', то ваше решение состоит из четырёх проектов:

  • VSShellStub1 - ядро оболочки (С++)
  • VSShellStub1UI - проект-спутник (satellite dll) оболочки, содержащий некоторые ресурсы (С++)
  • VSShellStub1.AboutBoxPackage - пример расширяющего вашу оболочку интерграционного пакета (Integration Package), реализующий простой диалог "About Box' (C#)
  • ShellExtensionsVSIX - проект расширения для оболочки, по умолчанию содержащий только интерграционный пакет VSShellStub1.AboutBoxPackage (C#)

Cкомпилируйте и запустите решение. Мои поздравления - вы увидете оболочку вашего будущего проекта, весьма напоминающую Visual Studio, но лишённую характерных иконок и прочих логотипов. Пункт меню 'Help' содержит ссылку на диалог "About Box', содержащийся в созданном по умолчанию расширении.

РАСШИРЕНИЕ ОБОЛОЧКИ

Разработчику предлагаются некоторые возможности по модификации самой оболочки, например в проекте оболочки есть возможность изменить её название, иконку и splash screen. Однако внедрение новой логики реализуется исключительно через модули расширения. Для Visual Studio создан единый и универсальный механизм расширения, доступный в равной мере как для самой Visual Studio, так и для всех систем, построенных на базе Isolated версий её оболочки.

Основным концептом расширяемости оболочки Visual Studio 2010 является так называемый VSIX-файл. Это файл, установленный в качестве расширения (extension) для выбранной вами оболочки и содержащий определённого вида манифест и бинарные коды пакетов расширения. Возвращаясь к созданной нами оболочке, VSIX-файл создаётся в результате компиляции проекта ShellExtensionsVSIX. В этом проекте наибольшего внимания заслуживает файл source.extension.manifest, в котором собрано описание VSIX-файла и всех входящих в его состав пакетов расширений.

Пакеты расширения могут иметь разное назначение, и основная масса самых востребованых шаблонов собрана на диалоге 'New Project' для языков C# и VB в разделе 'Extensibility'. В этом разделе, например, есть шаблоны расширений редактора файлов, позволяющие встроить в редактор свои собственные графические и логические функции. Однако, ещё более мощным средством расширения оболочки является т.н. Visual Studio Integration Package, доступный разработчикам ещё с версии Visual Studio 2008. В созданной нами оболочке, проект VSShellStub1.AboutBoxPackage и является примером Integration Package.

Integration Package позволяет реализовать:

  • собственный пункт меню, при нажатии на который выполняется необходимое вам действие внутри оболочки (например, открытие диалога 'About Box' в нашем VSShellStub1.AboutBoxPackage)
  • собственный Tool Window, реализующий нестандартное внутренее немодальное окно в вашей оболочке с вашим собственным устройством и фукциональностью
  • редактор файлов, позволяющий создавать или редактировайть файлы с определённым нестандартным расширением в модифицированном под ваши нужды редакторе
  • внутренние сервисы вашего приложения, реализующие определённую функциональность, доступную для вызова из других модулей расширения

и т.п., чего впролне достаточно для большинства приложений. При создании Integration Package можно выбрать один из языков C#, VB или C++.

СОЗДАЁМ СВОЙ ИНТЕГРАЦИОННЫЙ ПАКЕТ

Попробуем создать свой собственный новый интеграционный пакет для нашей оболочки. Для этого в решении нажмём 'Add' -> 'New Project' -> 'Other Project Type' -> 'Extensibility' -> 'Visual Studio Integration Package'. Выберем язык C# и включим в наш пакет все три возможности: 'Menu Command', 'Tool Window' и 'Custom Editor'. Откажемся от 'Integration Test Project' и 'Unit Test Project', они нам не интересны на начальном этапе. Если вы не меняли название пакета по умолчанию, то в вашем решении появится новый проект 'VSPackage1'.

Включим наш новый пакет в состав оболочки. Для этого откроем файл source.extension.manifest в проекте ShellExtensionsVSIX и нажмём 'Add Content' в разделе 'Content'. На открывшемся диалоге выберем 'VS Package' в качестве content type и проект 'VSPackage1' в качестве source. Компилируем и запускаем оболочку:

  • в группе пунктов меню 'Tools' появился наш собственный пункт меню 'My Command name', открывающий определённое в нашем пакете сообщение
  • в группе пунктов меню 'View' -> 'Other Windows' появился наш собственный пункт меню 'My Tool Window', открывающий определённое в нашем пакете немодальное инструментальное окно
  • диалог 'New' -> 'File' содержит новый раздел 'VSPackage1 Files', позволяющий создать файл с определённым нами расширением *.vspackage1 и отредактировать его в его собственном редакторе

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

РАЗВЁРТЫВАНИЕ ПРИЛОЖЕНИЯ

Некоторого внимания заслуживает развёртывание системы, построенной на базе Isolated Shell. В Visual Studio 2008 для развёртывания и автономной работы такой системы необходима была её регистрация с помощью специально получаемых с сайта Microsoft ключей (SLK и PLK), однако в Visual Studio 2010 это требование устранено. Кроме этого, в свой инсталляционный пакет вы должны включить т.н. Visual Studio Shell (Isolated Mode) redistributable package, который обеспечивает всё необходимое окружение для запуска оболочки. После этого развёртывание системы сводится к собственно к установке вашей оболочки со всеми её расширениями.

ЗАКЛЮЧЕНИЕ

Пожалуй, использование Isolated Shell будет наиболее ценным для IDE-подобных продуктов, таких как дизайнеры определённых файлов, редакторы экзотических языков программирования или другие средства манипуляции наборами файлов и их содержимым, однако круг применения этого мощного средства со временем может оказаться намного шире, особенно учитывая, что Microsoft уделяет расширяемости Visual Studio с каждой версией всё больше и больше внимания.


Categories: Development | Microsoft
Posted by Vitalii Tsybulnyk on Friday, March 19, 2010 4:01 AM
Permalink | Comments (0) | Post RSSRSS comment feed

Add comment




  Country flag

b i u quote
Loading