Альтернатива макросам в Visual Studio 2012

Я использую макросы для свойств ViewModel в XAML. Я использую их еще больше в WCF для создания свойств Message и DataContract.

К моему разочарованию, макросы, которые я создал, не будут использоваться в Visual Studio 2012.

Пример того, что я говорю, для виртуальной машины я бы ввел что-то вроде этого.

int id;
string name;

Выберите обе строки, запустите макрос и в итоге

private int _id;
private string _name;

public int Id
{
   get {return _id;}
   set
   {
      if(_id != value)
      {
        _id = value;
        RaisePropertyChanged("Id");
      }
}

public string Name
{
   if(_name != value)
   {
      _name = value;
      RaisePropertyChanged("Name");
   }
}

Я ищу идеи других решений, связанных с потерей макросов.

Ответ 1

Простейшей альтернативой макросам является создание надстроек. Я знаю, я знаю, меня это тоже не волновало, но это на самом деле удивительно легко. Есть три простые части:

  • Создайте проект макроса, перейдя через интерфейс мастера.
  • Напишите свой код.
  • Скопируйте макросы .addin и .dll в каталог Visual Studio Addins.

Возьмем простой макрос, который я написал, чтобы показать стартовую страницу после закрытия решения и превратить ее в надстройку.

Создать проект макроса

  • Запустите VS 2012 и создайте новый проект.
  • Перейдите в раздел "Шаблоны" > "Другие типы проектов" > "Расширяемость" и выберите надстройка Visual Studio.
  • Дайте ему имя, например ShowStartPage.
  • Нажмите "ОК". Это вызывает мастер надстройки.
  • Пройдите через мастер, выбрав:
    • Язык программирования: мы будем использовать С#
    • Хост приложения: VS 2012 должен быть выбран
    • Название и описание вашей надстройки
    • На странице параметров надстройки установите флажок только второй вариант ( "Я бы хотел, чтобы моя надстройка загружалась при запуске приложения-хозяина" )
    • Пропустите профайл "О приложении" на данный момент и нажмите "Готово".

Теперь у вас есть надстройка. Вот что вы с этим сделаете:

Введите код

Откройте файл Connect.cs. (Возможно, он уже открыт. Некоторые из материалов "DTE" должны выглядеть знакомыми.)

Добавьте этот код на уровне класса:

SolutionEvents solutionEvents;

Добавьте этот код в метод OnConnection сразу после строки _addInInstance = (AddIn)addInInst;:

solutionEvents = _applicationObject.Events.SolutionEvents;

solutionEvents.AfterClosing += () =>
{
    _applicationObject.ExecuteCommand("View.StartPage");
};

Нажмите кнопку "Запустить", чтобы проверить свой код. Новый экземпляр Visual Studio 2012 запускается с загруженной надстройкой. Теперь проверьте надстройку и убедитесь, что она работает. (Откройте решение, а затем закройте его, при появлении стартовой страницы верните его.)

Разверните его

Как только надстройка работает, чтобы регулярно ее использовать с Visual Studio 2012, вам нужно всего лишь развернуть два файла:

  • ShowStartPage.AddIn (из вашего основного каталога проекта)
  • ShowStartPage.dll (из каталога создания проекта, например bin\Debug или bin\Release)

Поместите эти два файла в свой каталог надстроек VS 2012, вероятно, расположенный здесь:

C:\Users\[your user name]\Documents\Visual Studio 2012\Addins

Затем выйдите и перезапустите Visual Studio, и вы увидите, что ваша надстройка работает. Вы также должны увидеть его, когда вы перейдете в "Инструменты" > "Менеджер надстроек".

В то время как это немного неприятнее, чем просто открытие редактора макросов и приклеивание вашего макрокоманда там, у него есть то преимущество, что вы можете использовать любой язык, который вы хотите, вместо того, чтобы застрять с несколько шелушащимся VB- как редактор в предыдущих версиях Visual Studio.

Ответ 2

Я продолжаю вырезать текст в Notepad ++ и использовать там макросы, а затем вставлять назад. Жаль, что функция больше не в Visual Studio 2012...

Ответ 3

Расширение Visual Commander (разработанное мной) является альтернативой макросам в Visual Studio 2012/2013/2015. Вы даже можете повторно использовать существующий код макросов Visual Studio в новых командах VB.

Ответ 4

Существует надстройка VSScript для Visual Studio, которая заменяет отсутствующие функции макросов. Хотя он не использует Visual Basic, но Lua скриптовый язык, вы можете попробовать его.

Имеется окно записи, окно редактора макрокода с IntelliSense и простой отладчик. Надстройка также поддерживает более ранние версии Visual Studio, поэтому, если вы предпочитаете язык Lua, а не Visual Basic, вы можете использовать его вместо оригинальных макросов Visual Studio.

Ответ 5

Мне было очень грустно видеть, что Макрос тоже. Вы можете приблизиться к подстановкам, используя поиск регулярных выражений и замену внутри Visual Studio 2012. В вашем случае:

Найти:

(.*) (.*);

Заменить на:

private $1 _$2;\npublic $1 $2\n{\n  get {return _$2;}\n  set\n  {\n    if(_$2 = value;\n    RaisePropertyChanged("$2");\n  }\n}\n

Это даст вам все, кроме капитализации имен свойств, для которых макросы будут лучше.

Но одно из преимуществ подхода с регулярным выражением заключается в том, что ввод не так прост (например, инструкции DDL таблицы базы данных).

Вот несколько полезных ссылок из MSDN:

Замены в регулярных выражениях

Использование регулярных выражений в Visual Studio

Ответ 6

Я использую Notepad ++ с регулярными выражениями следующим образом:

Найти:

public (.\*) (.)(.*) \\{ get; set; \\}

Заменить:

private \1 \l(\2)\3; \r\n public \1 \2\3 \\{ get \\{ return \l(\2)\3; \\} \r\n set \\{ \l(\2)\3 = value; OnPropertyChanged\(para => this\.\2\3\); \\}\\}

Ответ 7

Отъезд http://devexpress.com/coderush

Функция шаблонов делает в значительной степени то, что вы хотите.

Существует также бесплатная версия "Экспресс".

Ответ 8

Visual Отсутствие макросов в Studio 2012 привело меня ко мне, поскольку у меня есть несколько, которые я использую буквально все время, чтобы вставлять стандартные маленькие фрагменты текста с помощью одного нажатия клавиши. Поэтому я написал очень простой пакет расширяемости скриптов, VSScripts, который позволяет манипулировать текущим выбором из командной строки.

Это не претендует на то, чтобы быть полностью всеобъемлющей полной заменой старой макросистемы и не предоставляет клавиатурные макросы, но это позволяет воссоздать многие типы макросов для обработки текста.

Ответ 9

Вот что я сделал, чтобы сохранить свою макрофункцию...

  • Загрузите и установите Visual Studio 2012 SDK здесь (он содержит шаблон "Visual Studio Package" )
  • Новый проект → Установленный .Templates.Visual С#. Расширяемость .Visual Studio Package

    Страница мастера из 7

    language = C#
    gen new key is fine, or use another if you have one
    

    мастер-страница 3 из 7

    check "menu command"
    

    Страница мастера 7 из 7

    uncheck both integration and unit test project options
    

    Нажмите "Готово"

  • В файле .cs:

    using EnvDTE;
    using EnvDTE80;
    
    ...
    private void MenuItemCallback(object sender, EventArgs e)
    {
        MenuCommand cmd = sender as MenuCommand;
    
        // This should start to look like familiar macro code...
        EnvDTE80.DTE2 dte2 = Package.GetGlobalService(typeof(EnvDTE.DTE)) as DTE2;
        TextSelection selection = (TextSelection)dte2.ActiveDocument.Selection;
    
        dte2.UndoContext.Open("macro command replacement");
        selection.Text = "inserted from macro replacement";
        selection.NewLine(1);
        dte2.UndoContext.Close();
        ...
    
  • Запустите проект. Новый экземпляр Visual Studio начнется с загруженного пакета.
  • Найдите свою команду в качестве первой записи в верхней части меню "Инструменты". Нажмите, чтобы посмотреть, работает ли он.
  • Чтобы установить для реального, перейдите в каталог bin\debug (/release) и дважды щелкните файл .vsix
  • Он должен быть установлен в следующий раз при запуске
  • Перейдите в меню Tools → Options... → environment.keyboard и нарисуйте нажатие клавиши на своем инструменте

    Mapping theme : Visual C# 2005
    Command       : Tool.yourFunctionName (functions defined in the .vsct file)
    

Если вам нужна более одной команды, вам нужно добавить идентификатор меню в PkgCmdID.cs, Guids в Guids.cs, макеты в .vsct и функцию в * package.cs(и кнопку (MenuCommand ) в функции Initialize) для каждого из них. Все это можно сделать в том же проекте.

Я использовал этот проект для создания нескольких новых "инструментов" с моим старым макрокодом, а затем сопоставил свои ключи с ними. Это намного больше работы (и головных болей) спереди, но не имеет времени запаздывания, которое были у макросов.

Вероятно, есть способ сделать это, не занимаясь инструментальными меню. Я начал смотреть на эту прошлую ночь и, наконец, получил ее на работу, поэтому я покончил с ней на данный момент (по крайней мере, пока Microsoft не решит отказаться от этого тоже).

Ответ 10

Лично мне это нравится - расширение Visual Commander позволяет автоматизировать повторяющиеся задачи в Visual Studio