Microsoft наконец-то избавились от макросов в Visual Studio 2012, как в свое время и в MS Office. Попытка была предпринята еще в VS 2010 beta, но под натиском возмущенных пользователей макросы вернулись в релиз. В VS 2012 они исчезли окончательно. Полагаю у Microsoft были на то веские причины, но у пользователей, не безразличных к данному топику, это вызвало эмоции противоположные от восторга. Возможность на лету накидать какой-то макрос(довольно часто одноразовый), не прибегая к созданию расширения, была очень ценна. Именно поэтому у меня до сих пор стоит MS Office 2003, и именно эта причина удерживала от перехода на VisualStudio 2012.
Задача: перенести файлы с макросами в AddIn для возможности их использования в VS 2012 как с горячими клавишами, так и в меню.
В результате решения задачи появился шаблон проекта, в который достаточно добавить файлы с вашими макросами, откомпилировать и скопировать в папку My DocumentsVisualStudio 2012AddIns.
Загружаем проект — Dropbox.
Перенос модулей
- В Visual Studio 2010(или более ранней) открываем редактор макросов. В окне Project Explorer выделяем наши модули, нажимаем правой клавишей мыши, и выбираем Export... и сохраняем их.
- Открываем загруженный проект в Visual Studio 2012. Нажимаем правой клавишей мыши на папке Cmd, жмем Add Existing Items и выбираем сохраненные файлы.
- Каждый модуль оборачиваем в Namespace Cmd, из него будет производится выборка команд.
Namespace Cmd .... End Namespace
- Вспомогательные классы и модули, лучше поместить в другую папку, например в Helpers.
Основные настройки. Модуль "g.vb"
- Чтобы указать список команд, которые необходимо отображать в меню, заполняем коллекцию cmdIcons.
Формат: {''Имя_модуля.Имя_процедуры'', номер иконки(FaceID) из Microsoft Office Toolbar}. Пример:Friend cmdIcons As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer) From { ... , {"Sample.Test", 917} }
Подобрать иконки можно по этой ссылке
- Переменная MyMenuName указывает, в каком меню отображать список команд из cmdIcons.
На данный момент, стоит указывать имя из существующего списка главного меню. При указании другого имени, оно отображается только при первом запуске, при последующих исчезает вместе со списком. Буду рад, если кто поможет в решении этой проблемы. - Если нужно заполняем события документа:
Private Sub document_Saved(ByVal d As EnvDTE.Document) Handles docEvents.DocumentSaved 'документ сохранен End Sub Private Sub document_Open(ByVal d As EnvDTE.Document) Handles docEvents.DocumentOpened 'документ открыт End Sub Private Sub document_Close(ByVal d As EnvDTE.Document) Handles docEvents.DocumentClosing 'документ закрывается End Sub
Завершающая стадия
- Компилируем проект, открываем папку bin и копируем файлы MyAddin.AddIn, MyAddin.dll
в My DocumentsVisual Studio 2012AddIns. - Если проект был переименован, то нужно также переименовать файл MyAddin.AddIn и изменить его внутренность соответственно новому имени.
- Перезапускаем VisualStudio.
- Заходим в ToolsOptionsEnvironmentKeyboard вводим в поиске MyAddin(или то на что переименовали) и назначаем горячие клавиши.
Заметки
- В макросах доступ к IDE осуществлялся через переменную DTE, в модуле g.vb уже создана глобальная переменная с таким именем и с соответствующей ссылкой, поэтому вам не нужно ничего менять в макросах.
- Для удобства в g.vb помещены свойство Selection(указывающее на выделенный текст в документе) и свойство Doс(указывающее на активный документ), к которым в сможете обращаться из своих макросов через g.Selection и g.Doc.
- После перекомпиляции проекта и обновления файлов в папке Visual Studio 2012AddIns, назначенние горячих клавиши вашим макросам придется повторить.
P.S.: Буду рад конструктивной критике и предложениям.
Автор: dnv777