Pull to refresh

А еще в Visual Studio есть External Tools…

Reading time 4 min
Views 5.2K
Забавно, но я долгое время считал, что возможность запуска сторонних приложений из 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


Первый шаг – регистрация нового 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, и курсор будет указывать на:
  1. Файл, открытый в редакторе – если вы обратились к меню из редактора;
  2. Файл, выбранный в 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.

Для этого требуется:
  1. Открыть окно Customize (Main Menu > Tools > Customize...).
  2. Перейти на вкладку Commands.
  3. В разделе 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:
  1. External Tools in Visual Studio
  2. Arguments for External Tools
Tags:
Hubs:
+58
Comments 40
Comments Comments 40

Articles