Забавно, но я долгое время считал, что возможность запуска сторонних приложений из Visual Studio не заслуживает внимания. Серьезная интеграция требует разработки plugin, и точка!
Как оказалось, я был неправ. Есть множество сценариев, когда External Tools позволит быстро расширить возможности Visual Studio.
Как раз вчера мой хороший знакомый задал вопрос – как сделать аналог команды Open Containing Folder из пакета PowerCommands for Visual Studio 2010, но для вызова Far Manager, а не Windows Explorer? В оригинале эта команда доступна в контекстном меню Solution Explorer, она открывает Windows Explorer и устанавливает курсор на файл, для которого она была вызвана.
Моя первая идея (нет ничего проще – нужно скачать PowerCommands.vsix из Visual Studio Gallery, распаковать его, разобрать на части Reflector’ом, обложиться руководствами по расширению Visual Studio и быстро написать аналог) понимания не нашла – написание plugins для Visual Studio (если это не расширения редактора) по-прежнему остается весьма нетривиальной задачей, и если нет опыта, то даже при наличии примеров и пошаговых руководств ее решение займет не меньше, чем полдня – если не целый день!
Еще немного подумав, я решил, что для этих целей вполне подойдет механизм External Tools! И, действительно, создание «команды» Open Containing Folder in FAR заняло у меня не более получаса.
Давайте посмотрим, как это можно сделать.
Первый шаг – регистрация нового External Tool.
Для управления внешними инструментами в Visual Studio есть окно External Tools (Main Menu > Tools > External Tools...):
Для добавления нового инструмента нужно нажать кнопку Add и указать некоторые параметры:
Title: Open Containing Folder in FAR
Command: «C:\Program Files\Far2\Far.exe»
Arguments: $(ItemPath)
Параметр Initial Directory в данном случае можно оставить пустым.
Список аргументов, которые можно использовать для параметров Arguments и Initial Directory, можно посмотреть в MSDN Library в разделе External Tools in Visual Studio / Arguments for External Tools. Кроме того, можно воспользоваться специальным меню, которое открывается при нажатии на кнопку .
Вот что у меня в итоге получилось:
После закрытия окна External Tools в меню Main Menu > Tools появится пункт Open Containing Directory in FAR. При выборе этого пункта будет запускаться Far Manager, и курсор будет указывать на:
Результат выполнения команды Open Containing Directory in FAR показан на рисунке ниже. И этот результат, мягко говоря, не впечатляет… Что неудивительно, т.к. Far Manager у меня настроен для работы при другом размере окна.
Для того чтобы открывалось окно привычных размеров, потребуется написать небольшой сценарий:
Для запуска этого сценария из Visual Studio его потребуется сохранить на диск (я сохранил его под именем C:\psg\Tools\VSOpenInFAR\VSOpenInFAR.cmd) и изменить параметр Command, так, чтобы он указывал на этот сценарий:
Вот теперь результаты можно считать вполне удовлетворительными, окно Far Manager имеет привычные для меня размеры.
Для запуска CMD-сценариев Visual Studio использует cmd.exe, вызывая его в следующей форме:
Если опция Close on exit не отмечена, форма вызова немного меняется:
Это следует иметь в виду, чтобы избежать проблем с кавычками и с кодами завершения сценариев!
Ok, работоспособный инструмент мы получили, теперь можно заняться добавлением вкусностей – например, добавить вызов Open Containing Folder in FAR в контекстное меню Solution Explorer.
Для этого требуется:
Следующий шаг – выбор подходящей позиции для нового пункта меню. Я решил разместить его следом за пунктом Open Containing Folder.
Теперь нужно вставить в выбранную позицию новый пункт меню, для этого предназначена кнопка Add Command, вызывающая одноименное окно.
В этом окне нужно выбрать категорию Tools, а затем указать команду External Command 6 – к сожалению, команды для запуска External Tools можно идентифицировать только по порядковому номеру. После нажатия кнопки OK в контекстном меню появится новый пункт – External Command 6.
Завершающий шаг – переименование пункта меню. Для этого нужно нажать на кнопку Modify Selection и в поле Name указать название инструмента – Open Containing Folder in FAR.
Результат этих манипуляций показан ниже – пункт Open Containing Folder in FAR доступен в контекстном меню Solution Explorer:
Дополнительную информацию по работе с External Tools можно получить на MSDN:
Как оказалось, я был неправ. Есть множество сценариев, когда External Tools позволит быстро расширить возможности Visual Studio.
Как раз вчера мой хороший знакомый задал вопрос – как сделать аналог команды Open Containing Folder из пакета PowerCommands for Visual Studio 2010, но для вызова Far Manager, а не Windows Explorer? В оригинале эта команда доступна в контекстном меню Solution Explorer, она открывает Windows Explorer и устанавливает курсор на файл, для которого она была вызвана.
Моя первая идея (нет ничего проще – нужно скачать PowerCommands.vsix из Visual Studio Gallery, распаковать его, разобрать на части Reflector’ом, обложиться руководствами по расширению Visual Studio и быстро написать аналог) понимания не нашла – написание plugins для Visual Studio (если это не расширения редактора) по-прежнему остается весьма нетривиальной задачей, и если нет опыта, то даже при наличии примеров и пошаговых руководств ее решение займет не меньше, чем полдня – если не целый день!
Еще немного подумав, я решил, что для этих целей вполне подойдет механизм External Tools! И, действительно, создание «команды» Open Containing Folder in FAR заняло у меня не более получаса.
Давайте посмотрим, как это можно сделать.
Регистрация External Tool
Первый шаг – регистрация нового External Tool.
Для управления внешними инструментами в Visual Studio есть окно External Tools (Main Menu > Tools > External Tools...):
Для добавления нового инструмента нужно нажать кнопку Add и указать некоторые параметры:
Title: Open Containing Folder in FAR
Command: «C:\Program Files\Far2\Far.exe»
Arguments: $(ItemPath)
Параметр Initial Directory в данном случае можно оставить пустым.
Список аргументов, которые можно использовать для параметров Arguments и Initial Directory, можно посмотреть в MSDN Library в разделе External Tools in Visual Studio / Arguments for External Tools. Кроме того, можно воспользоваться специальным меню, которое открывается при нажатии на кнопку .
Вот что у меня в итоге получилось:
После закрытия окна External Tools в меню Main Menu > Tools появится пункт Open Containing Directory in FAR. При выборе этого пункта будет запускаться Far Manager, и курсор будет указывать на:
- Файл, открытый в редакторе – если вы обратились к меню из редактора;
- Файл, выбранный в Solution Explorer – если вы обратились к меню из Solution Explorer.
Запуск CMD-скриптов
Результат выполнения команды Open Containing Directory in FAR показан на рисунке ниже. И этот результат, мягко говоря, не впечатляет… Что неудивительно, т.к. Far Manager у меня настроен для работы при другом размере окна.
Для того чтобы открывалось окно привычных размеров, потребуется написать небольшой сценарий:
mode con cols=132 lines=59
"C:\Program Files\Far2\Far.exe" %*
Для запуска этого сценария из Visual Studio его потребуется сохранить на диск (я сохранил его под именем C:\psg\Tools\VSOpenInFAR\VSOpenInFAR.cmd) и изменить параметр Command, так, чтобы он указывал на этот сценарий:
Вот теперь результаты можно считать вполне удовлетворительными, окно Far Manager имеет привычные для меня размеры.
Примечание
Для запуска CMD-сценариев Visual Studio использует cmd.exe, вызывая его в следующей форме:
cmd.exe /c ""C:\psg\Tools\VSOpenInFAR\VSOpenInFAR.cmd" "C:\psg\...\Class2.cs""
Если опция Close on exit не отмечена, форма вызова немного меняется:
cmd.exe /c ""C:\psg\Tools\VSOpenInFAR\VSOpenInFAR.cmd" "C:\psg\...\Class2.cs" & pause"
Это следует иметь в виду, чтобы избежать проблем с кавычками и с кодами завершения сценариев!
Вызов External Tool из контекстного меню
Ok, работоспособный инструмент мы получили, теперь можно заняться добавлением вкусностей – например, добавить вызов Open Containing Folder in FAR в контекстное меню Solution Explorer.
Для этого требуется:
- Открыть окно Customize (Main Menu > Tools > Customize...).
- Перейти на вкладку Commands.
- В разделе Choose a menu or toolbar to rearrange выбрать пункт Context menu, а затем в расположенном рядом списке выбрать Project and Solution Context Menus | Item.
Следующий шаг – выбор подходящей позиции для нового пункта меню. Я решил разместить его следом за пунктом Open Containing Folder.
Теперь нужно вставить в выбранную позицию новый пункт меню, для этого предназначена кнопка Add Command, вызывающая одноименное окно.
В этом окне нужно выбрать категорию Tools, а затем указать команду External Command 6 – к сожалению, команды для запуска External Tools можно идентифицировать только по порядковому номеру. После нажатия кнопки OK в контекстном меню появится новый пункт – External Command 6.
Завершающий шаг – переименование пункта меню. Для этого нужно нажать на кнопку Modify Selection и в поле Name указать название инструмента – Open Containing Folder in FAR.
Результат этих манипуляций показан ниже – пункт Open Containing Folder in FAR доступен в контекстном меню Solution Explorer:
Дополнительная информация
Дополнительную информацию по работе с External Tools можно получить на MSDN: