Альтернатива макросам в 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");
}
}
Я ищу идеи других решений борьбы с потерей макросов.
10 ответов
Самая простая альтернатива макросам - создание надстроек. Я знаю, я знаю, я тоже не был взволнован, но на самом деле это удивительно легко. Есть три простых части:
- Создайте макропроект, шагая через интерфейс мастера.
- Напиши свой код.
- Скопируйте файлы макроса.addin и.dll в вашу Visual Studio
Addins
каталог.
Давайте возьмем простой макрос, который я написал, чтобы показать стартовую страницу после закрытия решения и превратить его в надстройку.
Создать макропроект
- Запустите VS 2012 и создайте новый проект.
- Перейдите в Шаблоны> Другие типы проектов> Расширяемость и выберите Надстройка Visual Studio.
- Дайте ему имя, например ShowStartPage.
- Нажмите ОК. Это вызывает мастера надстроек.
- Пройдите через мастера, выбрав:
- Язык программирования: мы будем использовать C#
- Хост приложения: VS 2012 должен быть выбран
- Название и описание вашей надстройки
- На странице параметров надстройки отметьте только второй параметр ("Я хочу, чтобы моя надстройка загружалась при запуске хост-приложения")
- Пропустите сейчас информацию о программе Box и нажмите Finish.
Теперь у вас есть проект надстройки. Вот что вы делаете с этим:
Написать код
Открой 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.
Я остановлюсь на вырезании текста в Notepad++ и использовании там макросов, а затем вставлю обратно. Жаль, что эта функция больше не присутствует в Visual Studio 2012...
Расширение Visual Commander (разработанное мной) является альтернативой макросам в Visual Studio 2012/2013/2015. Вы даже можете повторно использовать существующий код макросов Visual Studio в новых командах VB.
Для Visual Studio существует надстройка VSScript, которая заменяет отсутствующие макросы. Хотя он не использует Visual Basic, но использует язык сценариев Lua, вы можете попробовать его.
Есть рекордер, окно редактора макросов с IntelliSense и простой отладчик. Надстройка также поддерживает более ранние версии Visual Studio, поэтому, если вы предпочитаете язык Lua, а не Visual Basic, вы можете использовать его вместо оригинальных макросов Visual Studio.
Мне было очень грустно видеть, что Макросы тоже идут. Вы можете приблизиться к подстановкам, используя поиск и замену по регулярному выражению внутри 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:
Я использую 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\); \\}\\}
Недостаток макросов в Visual Studio 2012 сводил меня с ума, так как у меня есть несколько, которые я использую буквально все время, чтобы вставлять стандартные маленькие кусочки текста одним нажатием клавиши. Поэтому я написал очень простой пакет расширяемости скриптов, VSScripts, который позволяет манипулировать текущим выбором из программы командной строки.
Это не претендует на то, чтобы быть какой-то всеобъемлющей полной заменой старой макросистемы, и не предоставляет клавиатурных макросов, но позволяет воссоздать многие типы макросов для манипулирования текстом.
Вот что я сделал, чтобы сохранить функциональность моего макроса...
- Загрузите и установите Visual Studio 2012 SDK здесь (он содержит шаблон "Пакет Visual Studio")
Новый проект -> Installed.Templates.Visual C#.Extensibility.Visual Studio Package
Страница мастера 1 из 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.
- Он должен быть установлен при следующем запуске
Зайдите в меню Инструменты -> Параметры... -> 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) в Инициализировать функцию) для каждого. Все это можно сделать в одном проекте.
Я использовал этот проект для создания нескольких новых "инструментов" со своим старым макросом, а затем сопоставил им ключи. Это намного больше работы (и головные боли) заранее, но не имеет времени задержки, которое имели макросы.
Вероятно, есть способ сделать это, не занимая меню инструментов. Я начал смотреть на это прошлой ночью и, наконец, заставил его работать, так что на данный момент с этим покончено (по крайней мере, до тех пор, пока Microsoft не решит отказаться от этого тоже).
Проверьте http://devexpress.com/coderush
Функция шаблонов делает в значительной степени то, что вы хотите.
Также есть бесплатная "Экспресс" версия.
Лично мне это нравится - расширение Visual Commander позволяет автоматизировать повторяющиеся задачи в Visual Studio