Pull to refresh

Импорт макросов в Visual Studio 2012

Reading time3 min
Views6.6K
Microsoft наконец-то избавились от макросов в Visual Studio 2012. Попытка была предпринята еще в VS 2010 beta, но под натиском возмущенных пользователей макросы вернулись в релиз. В VS 2012 они исчезли окончательно. Полагаю у Microsoft были на то веские причины, но у пользователей, не безразличных к данному топику, это вызвало эмоции противоположные от восторга. Возможность на лету накидать какой-то макрос(довольно часто одноразовый), не прибегая к созданию расширения, была очень ценна. И для тех, кто за время прошлых студий написал немало полезных для себя макросов, переход на VisualStudio 2012 довольно проблематичен.

Задача: перенести файлы с макросами в AddIn для возможности их использования в VS 2012 как с горячими клавишами, так и в меню.

В результате решения задачи появился шаблон проекта, в который достаточно добавить файлы с вашими макросами, откомпилировать и скопировать в папку My Documents\VisualStudio 2012\AddIns.

Загружаем проект — 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 Documents\Visual Studio 2012\AddIns.
  • Если проект был переименован, то нужно также переименовать файл MyAddin.AddIn и изменить его внутренность соответственно новому имени.
  • Перезапускаем VisualStudio.
  • Заходим в Tools\Options\Environment\Keyboard вводим в поиске MyAddin(или то на что переименовали) и назначаем горячие клавиши.

Заметки


  • В макросах доступ к IDE осуществлялся через переменную DTE, в модуле g.vb уже создана глобальная переменная с таким именем и с соответствующей ссылкой, поэтому вам не нужно ничего менять в макросах.
  • Для удобства в g.vb помещены свойство Selection(указывающее на выделенный текст в документе) и свойство Doс(указывающее на активный документ), к которым в сможете обращаться из своих макросов через g.Selection и g.Doc.
  • После перекомпиляции проекта и обновления файлов  в папке Visual Studio 2012\AddIns, назначенние горячих клавиши вашим макросам придется повторить.


P.S.: Буду рад конструктивной критике и предложениям.
Tags:
Hubs:
+3
Comments4

Articles