3

Я создал собственный шаблон проекта, связанный с пользовательским типом проекта. Решение в значительной степени зависит от MPF for Projects - Visual Studio 2012 framework.Как программно переопределить действия сборки и запуска?

То, что я хотел бы сделать дальше, переопределяет события по умолчанию «Build» (F6) и «Начать без отладки» (ctrl + F6) для этого настраиваемого типа проекта. Само решение будет развернуто как пакет VSIX.

Любая помощь приветствуется.

+0

Что вы хотите от этих клавиш? Возможно, есть способ интегрировать то, что вы хотите, чтобы они делали обычные пути. –

+0

@JasonMalinowski Я хочу использовать внешний компилятор вместе с некоторой пользовательской логикой в ​​зависимости от типов файлов, добавленных в проект. – Dante

+0

Должна ли такая настройка выполняться через msbuild вместо любых типов проектов VS? Что вы ожидаете, если пользователь будет строить из командной строки или их любимый процесс непрерывной интеграции? –

ответ

8

Вы можете перехватить любую команду, исходящую из интерфейса 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 and Id command

Guid и CmdID из сообщения являются обязательным параметром для CommandEvents.

Если вы используете новый язык (создайте проект нового типа), вернее добавить пользовательскую интеграцию Debug Engine и MSBuild. Примеры такой реализации можно увидеть в проектах IronPython или Nemerle.