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

В моем расширении также есть функциональность компоновщика, которая создает дополнительные проекты и решения после или до того, как 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 ответ

Решение

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

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

С уважением,