我创建了一个与自定义项目类型相关联的自定义项目模板。解决方案在很大程度上取决于MPF for Projects - Visual Studio 2012 framework。
我接下来要做的是覆盖此自定义项目类型的默认“Build”(F6)和“Start without debugging”(ctrl + F6)事件。解决方案本身将部署为VSIX包。
感谢任何帮助。
答案 0 :(得分: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
参数,将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项目中查看此类实施的示例。