Вы находитесь на страницах старой версии сайта.
Переходите на новую версию Interface.Ru

СТАТЬЯ
27.03.03


Автоматизация работы
в среде Visual Studio .NET

© Андрей Колесов
© Статья была опубликована в “PCWeek/RE”
№ 42(360)'2002

В пакете Microsoft Visual Studio .NET помимо множества новшеств, связанных с использованием .NET-платформы, существенно расширены возможности управления средой разработки и автоматизации выполнения часто используемых операций. В предыдущих версиях этого инструмента для решения подобных задач нужно было подключать дополнения формата COM Add-Ins, представленные в виде библиотек ActiveX DLL. Создать же такие модули было очень непросто хотя бы потому, что при этом запрещалось пользоваться отладочными средствами среды разработки. Так или иначе, но реально COM Add-Ins разрабатывались обычно в коммерческих целях специализированными фирмами-разработчиками. “Обычные” программисты крайне редко прибегали к ним для собственного, “внутреннего” потребления.

С появлением VS.NET ситуация в этой сфере изменилась: в дополнение к COM Add-Ins он позволяет создавать и использовать макросы. В целом механизм макросов здесь похож на тот, что многим программистам знаком по приложениям MS Office, хотя есть в нем некоторые принципиальные отличия.

Оба варианта средств автоматизации и настройки VS.NET базируются на применении объектной модели среды разработки (VS.NET IDE), которая строится на корневом объекте Development Tools Extensibility (DTE), находящемся в пространстве имен EnvDTE библиотек классов .NET Framework. Через DTE можно получить ссылки на все множество объектов, соответствующих отдельным элементам IDE, таким, как Windows, Documents, Solutions, Projects, Debugger и Events (рис. 1). Каждый такой объект позволяет обратиться к собственной иерархической системе объектов, коллекций, свойств, методов и событий. Многие из них имеют перекрестные связи, а следовательно, и доступ к ним можно получить несколькими путями. Эта система обеспечивает доступ практически к любым компонентам и функциям среды разработки VS.NET. В то же время нужно подчеркнуть, что вся объектная модель IDE является сугубо внутренней; DTE — не COM-объект, он недоступен из внешних приложений, т. е. VS.NET в отличие, например, от Word не относится к ActiveX-серверам.

Рис. 1. Общая структура иерархической системы объектов среды разработки (представлена только небольшая часть основных объектов)

Знакомство с макросами

Общая последовательность работы с макросами соответствует иерархии компонентов — проект, модуль, макрос. Для работы с ними непосредственно в среде VS.NET используется специальное окно Macro Explorer, которое открывается командой Tools|Macros|Macro Explorer (рис. 2). К сожалению, в документации технология работы с макросами и объектом DTE описана весьма скудно, поэтому оптимальным вариантом является изучение Macro-проекта Samples, входящего в поставку. Он содержит пять модулей, включающих по набору макросов и взаимодействующих с отдельными объектами среды разработки (VSEditor — редактор кода, VSDebugger — отладчик и т. д.).

Рис. 2. Структура Macro-проектов, подключенных к среде разработки VS.NET IDE

Для запуска макросов совсем не обязательно открывать окно Macro Explorer — для часто применяемых операций можно установить ссылки в виде команд меню, кнопок панелей управления или “горячих” клавиш с помощью диалогового окна Tools|Customize. Настройка пользовательского интерфейса среды разработки VS.NET выполняется точно так же, как в офисных приложениях Microsoft.
Самым простым методом создания макросов является запись (Macro Recording; примерно то же самое делается в MS Office). Но все же этот вариант скорее годится для формирования заготовок, с тем чтобы на их базе затем писать более сложные программы. Для разработки макросов в VS.NET имеется специальная среда, которая открывается в отдельном окне с помощью команды Macros IDE меню Tools|Macros (рис. 3). Macros IDE — это фактически та же основная среда VS IDE, но только с усеченным набором функций. Каждый Macro-проект обязательно включает модуль обработки событий EnvironmentEvents, содержащий несколько групп предопределенных событийных процедур. Создаваемые посредством этих процедур макросы автоматически реагируют на операции, выполняемые в основной среде VS IDE. Например, в группу DocumentEvents входят события DocumentOpening, DocumentClosing, DocumentClosed и DocumentSaved.

Рис. 3. Среда разработки макросов — Macros IDE

Использование макросов, конечно же, существенно упрощает автоматизацию работы в среде VS.NET. Но по сравнению с COM Add-Ins и механизмом макросов, уже давно реализованным в MS Office/VBA, эта технология содержит целый ряд ограничений:

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

среда Macro IDE не является ActiveX-контейнером — из нее нельзя, например, обращаться к внешним COM-объектам, тем же офисным приложениям;

макросам доступно лишь подмножество объектной модели DTE и библиотек классов .NET Framework;
cоздавать макросы можно только на языке VB.NET;

конечно, метод Macro Recorder очень прост, однако не все созданные мною таким образом макросы заработали: выдавались сообщения о неверном использовании команд, о конфликтах потоков и пр. Возможно, для устранения подобных проблем нужно более точное управление установками среды, но вполне вероятно, что есть какие-то дефекты и в самом VS.NET (не будем забывать — это ведь версия 1.0!).

Применение COM Add-Ins

Наиболее универсальный метод автоматизации работы в среде VS.NET IDE — использование расширений COM Add-Ins. Создавать их сложнее, нежели макросы (прежде всего потому, что в этой процедуре разделены процессы написания кода и отладки), но и возможности COM Add-Ins гораздо шире — это могут быть полноценные приложения с развитым пользовательским интерфейсом, с применением баз данных и всей функциональности .NET Framework. Они могут подключаться не только к VS.NET IDE, но и к Macro IDE. Механизм их создания фактически идентичен тому, что задействован в VS 6.0, VB 6.0, VBA 6.0 и MS Office (на базе подключения программного интерфейса IDTExtensibility2). Эти COM-компоненты могут быть написаны, вообще говоря, на любом языке, поддерживающем COM, но специальные средства разработки в VS.NET позволяют использовать только VB.NET и C#.

Для создания COM Add-Ins в VS.NET нужно запустить мастер Add-Ins Project Wizard, который находится в папке Other Projects|Extensibility Projects диалогового окна New Project. Собственно, в этой папке есть два мастера: один позволяет написать расширение специально для VS.NET, другой — совместное (Shared) дополнение, подключаемое к различным приложениям, в том числе к MS Office. Каждый из них в режиме диалога с разработчиком выполняет подключение необходимых библиотек, элементов пользовательского интерфейса и пр.

После того как шаблон проекта будет готов, нужно заняться его функциональным наполнением, используя все доступные средства VS.NET. Однако отладка этого специализированного приложения сопряжена с определенными сложностями, так как некоторые режимы его работы непосредственно в среде VS.NET проверить нельзя (их можно запускать только при работе с автономным COM Add-Ins). И вот здесь опять может пригодиться механизм макросов: функциональные блоки лучше отладить с его помощью, а потом просто подключить готовый код к приложению COM Add-Ins.

Дополнительная информация

За дополнительной информацией обращайтесь в компанию Interface Ltd.

Обсудить на форуме Microsoft

Рекомендовать страницу

INTERFACE Ltd.
Телефон/Факс: +7 (495) 925-0049
Отправить E-Mail
http://www.interface.ru
Rambler's Top100
Ваши замечания и предложения отправляйте редактору
По техническим вопросам обращайтесь к вебмастеру
Дата публикации: 27.03.03