Как я могу переопределить все возможные события перед сборкой и отменить его?Перезапуск сборки позже работает нормально - PullRequest
0 голосов
/ 26 сентября 2018

В моем расширении также есть функциональность компоновщика, которая создает дополнительные проекты и решения после или до того, как Visual Studio создаст текущее решение.Поэтому, когда я создаю дополнительные проекты, я должен блокировать любые попытки пользователя случайно создать текущее решение или любой из проектов.Он должен подождать.

Следующий код работает хорошо, но, похоже, он не блокирует сборку, когда я щелкаю правой кнопкой мыши по проекту в обозревателе решений и выбираю «Построить» или «Перестроить» в этом всплывающем меню..

private void OverrideBuildCommands()
{
    /* this I can cancel/restart */
    BuildCommandEvents = DTE.Events.CommandEvents["{5EFC7975-14BC-11CF-9B2B-00AA00573819}", 882];
    BuildCommandEvents.BeforeExecute += BuildCommandEvents_BeforeExecute;
    BuildCommandEvents.AfterExecute += BuildCommandEvents_AfterExecute;

    BuildEvents = DTE.Events.BuildEvents;
    DTE.Events.BuildEvents.OnBuildBegin += BuildEvents_OnBuildBegin;
    DTE.Events.BuildEvents.OnBuildDone += BuildEvents_OnBuildDone;
    DTE.Events.BuildEvents.OnBuildProjConfigBegin += BuildEvents_OnBuildProjConfigBegin;
    DTE.Events.BuildEvents.OnBuildProjConfigDone += BuildEvents_OnBuildProjConfigDone;

    /* this I can cancel/restart */
    RebuildCommandEvents = DTE.Events.CommandEvents["{5EFC7975-14BC-11CF-9B2B-00AA00573819}", 883];
    RebuildCommandEvents.BeforeExecute += RebuildCommandEvents_BeforeExecute;
    RebuildCommandEvents.AfterExecute += RebuildCommandEvents_AfterExecute;

    DTEEvents = DTE.Events.DTEEvents;
    DTE.Events.DTEEvents.OnBeginShutdown += DTEEvents_OnBeginShutdown_CancelBuild;
}

Буду признателен за любую помощь или указатель.

1 Ответ

0 голосов
/ 27 сентября 2018

Используя функцию ведения журнала VSIP, включенную в Расширение Mad's ExtensibilityTools , вы можете легко идентифицировать идентификаторы команд, удерживая клавиши CTRL + SHIFT при выборе рассматриваемых команд Build или Rebuild.

Похоже, команды Build и Rebuild в контекстном меню узла проекта - 892 и 893 соответственно.Я подозреваю, что если вы добавите события Before / AfterExecute для этих команд, это вас исправит.

С уважением,

...