gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:40:50 25 4
gpt4 key购买 nike

我有一个包含多个启动项目的解决方案,我正在尝试每晚自动重新启动其中一个项目,同时将新进程附加到同一个调试器。

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

我知道 Visual Studio 团队发布了 Visual Studio extension这允许 automatically attaching child processes to the current debugger ,它可能比我的代码工作得更好,但它不可移植,因为它需要本地配置。

实现我需要的最简单方法似乎是使用 IDE 本身以编程方式重新启动项目,就像我通过右键单击项目并选择调试 > 启动新实例 手动执行的那样。我可以访问我的代码中的相关 DTE 对象(在开发中)。

因此,是否有任何方法可以使以下伪代码起作用,要求 Visual Studio 通过将其作为命令参数传递来开始调试特定项目/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

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

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

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

关于c# - 使用 EnvDTE.ExecuteCommand 以编程方式开始调试特定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32135391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com