Автоматизация работы в среде 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. Рис. 3. Среда разработки макросов - Macros IDE Использование макросов, конечно же, существенно упрощает автоматизацию работы в среде VS.NET. Но по сравнению с COM Add-Ins и механизмом макросов, уже давно реализованным в MS Office/VBA, эта технология содержит целый ряд ограничений: Macro-проекты VS.NET могут содержать только обычные модули кода и модули классов. Пока нет возможности применять формы и элементы управления, т. е. с их помощью нельзя реализовать полнофункциональный пользовательский интерфейс; среда Macro IDE не является ActiveX-контейнером - из нее нельзя, например, обращаться к внешним COM-объектам, тем же офисным приложениям; макросам доступно лишь подмножество объектной модели DTE и библиотек классов .NET Framework; конечно, метод 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. |