Вы можете перехватить любую команду, исходящую из интерфейса Visual Studio в VSPackage. Для этого вам необходимо подписаться на нужное событие DTE.Events.CommandEvents
. Вы должны передать GUID и Id в CommandEvents.
private void Initialize()
{
var dte = GetService(typeof(SDTE)) as EnvDTE.DTE;
_startCommandEvents = dte.Events.CommandEvents["{5EFC7975-14BC-11CF-9B2B-00AA00573819}", 295];
_startCommandEvents.BeforeExecute += OnLeaveBreakMode;
}
private void OnBeforeStartCommand(string guid, int id, object customIn, object customOut, ref bool cancelDefault)
{
//your event handler this command
}
Ваш обработчик событий имеет ref bool cancelDefault
параметр, передавая в cancelDefault
Истинного вы отмените команду VS, заменяя тем самым поведение VS на их.
Для получения команды GUID и Id вы можете использовать функцию VSIP Logging. Чтобы включить эту функцию, установите значение раздела реестра:
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\<version>\General] "EnableVSIPLogging"=dword:00000001
и перезапустите Visual Studio IDE. Затем с помощью Ctrl-Shift, щелкните по пункту меню, и вы получите сообщение, как это:
Guid и CmdID из сообщения являются обязательным параметром для CommandEvents.
Если вы используете новый язык (создайте проект нового типа), вернее добавить пользовательскую интеграцию Debug Engine и MSBuild. Примеры такой реализации можно увидеть в проектах IronPython или Nemerle.
Что вы хотите от этих клавиш? Возможно, есть способ интегрировать то, что вы хотите, чтобы они делали обычные пути. –
@JasonMalinowski Я хочу использовать внешний компилятор вместе с некоторой пользовательской логикой в зависимости от типов файлов, добавленных в проект. – Dante
Должна ли такая настройка выполняться через msbuild вместо любых типов проектов VS? Что вы ожидаете, если пользователь будет строить из командной строки или их любимый процесс непрерывной интеграции? –