我有一个包含多个启动项目的解决方案,我试图每晚自动重新启动其中一个项目,同时将新进程附加到同一个调试器。
我能够重新启动该过程(使用Process.Start
)并将当前调试器附加到其上,但到目前为止它的可靠性还不是很高,并且根据设计,单击“停止”按钮只会与进程分离而不是终止它。
我知道 Visual Studio 团队已经发布了Visual Studio 扩展 https://visualstudiogallery.msdn.microsoft.com/a1141bff-463f-465f-9b6d-d29b7b503d7a这允许自动将子进程附加到当前调试器 http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/24/introducing-the-child-process-debugging-power-tool.aspx,它可能比我的代码工作得更好,但它不可移植,因为它需要本地配置。
实现我需要的最简单方法似乎是使用 IDE 本身以编程方式重新启动项目,就像我通过右键单击项目并选择手动执行的那样调试 > 启动新实例。我可以访问代码中的相关 DTE 对象(在开发时)。
因此,有什么方法可以使以下伪代码工作,要求 Visual Studio 开始调试specific项目/exe 通过将其作为命令参数传递?
DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance", "ProjectToBeRestarted");
DTE.ExecuteCommand("Debug.Start", "ProjectToBeRestarted");
DTE.ExecuteCommand("Debug.Start", "ProjectToBeRestarted.exe");
我希望尽可能避免操作 UI(例如存储原始启动项目、设置新项目以及恢复启动项目)。
您面临的问题是很少有 Visual Studio 命令接受参数作为输入。考虑到命令通常使用当前 IDE 上下文(例如选择、插入符号位置等)来推断实际应该做什么,这是有道理的。例如,ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance
命令依赖于解决方案资源管理器中当前选定的项目来了解要开始调试的项目,并且它不接受参数。
作为参考,您可以在此处找到接受参数的 Visual Studio 命令的完整列表:https://msdn.microsoft.com/en-us/library/c338aexd.aspx https://msdn.microsoft.com/en-us/library/c338aexd.aspx
要解决您的问题,您需要首先使用 DTE 对象设置当前项目选择,然后执行Startnewinstance
命令。
DTE.ToolWindows.SolutionExplorer.GetItem("SolutionNameHere\\ProjectNameHere").Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance")
注意:根据您的编程语言,可能需要也可能不需要双反斜杠转义。最后的字符串应该只有一个反斜杠。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)