СРЕДСТВА РАЗРАБОТКИ
В пакете 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;
- создавать макросы можно только на языке 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.