Как я могу переопределить все возможные события перед сборкой и отменить его? Перезапуск сборки позже работает нормально
В моем расширении также есть функциональность компоновщика, которая создает дополнительные проекты и решения после или до того, как 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 для этих команд, это вас исправит.
С уважением,