如何覆盖所有可能的 Before Build Event 并取消它?稍后重新启动构建工作正常

How can I override every possible Before Build Event, and cancel it? Restarting the build later is working fine

在我的扩展中,我还具有构建器功能,可以在 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;
}

如有任何帮助或指点,我们将不胜感激。

使用 Mad's ExtensibilityTools extension 中包含的“启用 VSIP 日志记录”功能,您可以通过在选择相关构建或重建命令时按住 CTRL+SHIFT 键轻松识别命令 ID。

项目节点上下文菜单中的“构建”和“重建”命令似乎是 分别为 892 和 893。我怀疑如果您也为这些命令添加 Before/AfterExecute 事件,那将解决您的问题。

此致,