在我的扩展程序中,我还具有生成器功能,可以在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;
}
任何帮助或指点将不胜感激。
答案 0 :(得分:1)
使用Mad's ExtensibilityTools extension附带的“启用VSIP日志记录”功能,通过在选择有问题的“生成”或“重建”命令时按住CTRL + SHIFT键,可以轻松识别命令ID。
项目节点的上下文菜单上的“生成”和“重建”命令显示为 分别为892和893。我怀疑您是否还为这些命令添加了Before / AfterExecute事件,那将为您解决问题。
此致