Erw*_*yer 8 c# debugging scripting automation visual-studio
我有一个包含多个启动项目的解决方案,我试图在每晚自动重新启动其中一个,同时保持新进程连接到同一个调试器.
我能够重新启动进程(使用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");
Run Code Online (Sandbox Code Playgroud)
我想尽可能避免操纵UI(比如存储原始启动项目,设置新项目,以及恢复启动项目).
小智 5
您面临的问题是很少有Visual Studio命令接受参数作为输入。考虑到命令通常使用当前的IDE上下文(例如,选择,插入标记位置等)来推断实际应该执行的操作,这是有道理的。例如,该ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance
命令依赖于解决方案资源管理器中当前选择的项目来知道要开始调试的项目,并且该命令不接受参数。
作为参考,您可以在此处找到接受参数的Visual Studio命令的完整列表:https : //msdn.microsoft.com/zh-cn/library/c338aexd.aspx
要解决您的问题,您将需要使用DTE对象首先设置当前项目选择,然后执行Startnewinstance
命令。
DTE.ToolWindows.SolutionExplorer.GetItem("SolutionNameHere\\ProjectNameHere").Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance")
Run Code Online (Sandbox Code Playgroud)
注意:根据您的编程语言,可能需要也可能不需要双反斜杠转义。最后的字符串应仅包含一个反斜杠。