使用EnvDTE.ExecuteCommand以编程方式开始调试特定的项目

我有一个包含多个启动项目的解决方案,我试图每晚自动重新启动其中的一个,同时让新进程连接到同一个调试器。

我能够重新启动进程(使用Process.Start ),并将当前的调试器附加到它,但目前为止它的可靠性并不高,并且通过设计,单击“停止”按钮只会脱离进程而不是终止进程。

我知道Visual Studio团队已经发布了一个Visual Studio扩展,该扩展允许自动将子进程附加到当前的调试器,这可能比我的代码更好,但它不可移植,因为它需要本地配置。

实现我所需要的最简单的方法似乎是以编程方式使用IDE本身重新启动项目,就像我手动通过右键单击项目并选择Debug> Start New Instance一样 。 我有权访问我的代码中的相关DTE对象(在开发过程中)。

因此,是否有任何方法可以使下面的伪代码工作,让Visual Studio开始通过将它作为命令参数传递来调试特定的项目/ exe文件?

DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance", "ProjectToBeRestarted");

DTE.ExecuteCommand("Debug.Start", "ProjectToBeRestarted");

DTE.ExecuteCommand("Debug.Start", "ProjectToBeRestarted.exe");

我想尽可能地避免操纵用户界面(如存储原始的启动项目,设置新的项目,以及恢复启动项目)。


你面临的问题是有很少的Visual Studio命令接受参数作为输入。 考虑到命令通常使用当前的IDE上下文(例如选择,插入位置等)来推断应该实际完成的内容,这是有意义的。 例如, ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance命令依赖于解决方案资源管理器中当前选定的项目来知道哪个项目开始调试,并且它不接受参数。

作为参考,您可以在这里找到接受参数的Visual Studio命令的完整列表:https://msdn.microsoft.com/en-us/library/c338aexd.aspx

要解决您的问题,您需要先使用DTE对象设置当前的项目选择,然后执行Startnewinstance命令。

DTE.ToolWindows.SolutionExplorer.GetItem("SolutionNameHereProjectNameHere").Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance")

注意:根据您的编程语言,可能需要也可能不需要双反斜杠转义。 最后一个字符串应该只有一个反斜杠。

链接地址: http://www.djcxy.com/p/87593.html

上一篇: Start debugging specific project programatically using EnvDTE.ExecuteCommand

下一篇: How to give opacity for div when it is set Overflow=visible