【发布时间】:2015-08-19 09:37:31
【问题描述】:
在一个Visual Studio 2013自动化项目(即Visual Studio Package项目)中,当被调试进程退出时,如何让事件处理程序运行,如何找出被调试进程的退出代码是什么?
我正在像这样启动调试器(C#):
var dte = ...;
foreach (EnvDTE.Project proj in dte.Solution.Projects)
{
if (proj.Name == "blahblah")
{
dte.Solution.Properties.Item("StartupProject").Value = proj.Name;
dte.Debugger.Go(false);
break;
}
}
我希望在被调试进程退出时运行更多代码,并且该代码需要知道被调试进程的退出状态。能做到吗?
【问题讨论】:
-
是的,可以做到。您需要订阅
dte.Debugger.Events(或dte.DebugEvents?)中的适当事件,并保留对DTE 事件对象的引用,以便在触发实际事件之前不会收集垃圾。此外,您对项目的循环可能已损坏 - 它会跳过解决方案文件夹中的所有项目,并将解决方案文件夹视为项目......老实说,如果你可以做你想做的事情没有丑陋的 EnvDTE 界面(即通过真正的 COM 接口),你可能会更好,但它会更多的代码/工作。 -
感谢有关解决方案文件夹等的指针。我所拥有的将用于我的目的,但我会考虑正确修复它。
-
我猜
dte.Events.DebugEvents.OnEnterDesignMode是您正在考虑的事件吗?但是那我怎样才能得到被调试进程的退出码呢? -
奇怪,我找不到通过 EnvDTE 访问退出代码的方法。不过,可以直接通过 VS 接口进行操作——请参阅我的回答。
标签: c# visual-studio visual-studio-2013 envdte