我创建了一个与自定义项目类型关联的自定义项目模板。该解决方案严重依赖于Projects-Visual Studio 2012 框架的 MPF。
接下来我想做的是覆盖此自定义项目类型的默认“构建”(F6)和“不调试启动”(ctrl + F6)事件。解决方案本身将部署为 VSIX 包。
任何帮助表示赞赏。
我创建了一个与自定义项目类型关联的自定义项目模板。该解决方案严重依赖于Projects-Visual Studio 2012 框架的 MPF。
接下来我想做的是覆盖此自定义项目类型的默认“构建”(F6)和“不调试启动”(ctrl + F6)事件。解决方案本身将部署为 VSIX 包。
任何帮助表示赞赏。
您可以在 VSPackage 中拦截来自 Visual Studio UI 的任何命令。为此,您应该订阅所需的事件DTE.Events.CommandEvents
。您必须将 GUID 和 Id 传递给 CommandEvents。
private void Initialize()
{
var dte = GetService(typeof(SDTE)) as EnvDTE.DTE;
_startCommandEvents = dte.Events.CommandEvents["{5EFC7975-14BC-11CF-9B2B-00AA00573819}", 295];
_startCommandEvents.BeforeExecute += OnLeaveBreakMode;
}
private void OnBeforeStartCommand(string guid, int id, object customIn, object customOut, ref bool cancelDefault)
{
//your event handler this command
}
您的事件处理程序具有ref bool cancelDefault
参数,传入cancelDefault
TRUE 您取消 VS 命令,从而用它们替换 VS 行为。
要获取 GUID 和 Id 命令,您可以使用 VSIP 日志记录功能。要启用此功能,请设置注册表项的值:
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\<version>\General] "EnableVSIPLogging"=dword:00000001
并重新启动 Visual Studio IDE。然后使用 Ctrl-Shift,单击一个菜单项,您将收到如下消息:
消息中的 Guid 和 CmdID 是 CommandEvents 的必需参数。
如果您正在实现一种新语言(创建一种新类型的项目),添加自定义调试引擎和 MSBuild 集成更为正确。您可以在IronPython或Nemerle项目中看到此类实现的示例。