如何覆盖所有可能的“构建前事件”,然后将其取消?稍后重新启动构建工作正常

时间:2018-09-26 20:52:37

标签: visual-studio-2017 visual-studio-extensions vsix visual-studio-2017-build-tools

在我的扩展程序中,我还具有生成器功能,可以在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 :(得分:1)

使用Mad's ExtensibilityTools extension附带的“启用VSIP日志记录”功能,通过在选择有问题的“生成”或“重建”命令时按住CTRL + SHIFT键,可以轻松识别命令ID。

项目节点的上下文菜单上的“生成”和“重建”命令显示为 分别为892和893。我怀疑您是否还为这些命令添加了Before / AfterExecute事件,那将为您解决问题。

此致