4

我创建了一个与自定义项目类型关联的自定义项目模板。该解决方案严重依赖于Projects-Visual Studio 2012 框架的 MPF

接下来我想做的是覆盖此自定义项目类型的默认“构建”(F6)和“不调试启动”(ctrl + F6)事件。解决方案本身将部署为 VSIX 包。

任何帮助表示赞赏。

4

1 回答 1

8

您可以在 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参数,传入cancelDefaultTRUE 您取消 VS 命令,从而用它们替换 VS 行为。

要获取 GUID 和 Id 命令,您可以使用 VSIP 日志记录功能。要启用此功能,请设置注册表项的值:

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\<version>\General] "EnableVSIPLogging"=dword:00000001 

并重新启动 Visual Studio IDE。然后使用 Ctrl-Shift,单击一个菜单项,您将收到如下消息:

Guid 和 Id 命令

消息中的 Guid 和 CmdID 是 CommandEvents 的必需参数。

如果您正在实现一种新语言(创建一种新类型的项目),添加自定义调试引擎和 MSBuild 集成更为正确。您可以在IronPythonNemerle项目中看到此类实现的示例。

于 2013-04-14T13:31:25.940 回答