Visual Studio:在调试停止时执行清理代码

时间:2009-06-23 15:47:34

标签: c# visual-studio debugging

我们开发了一个使用Excel互操作库(Microsoft.Office.Interop.Excel)来读取一些Excel文件的应用程序。

当应用程序出现问题时,会处理事件Application.ThreadException,因此会释放资源(Excel已关闭......)。

问题在于,当我们使用VS调试器时,如果我们停止执行(因为进程在异常或断点上中断,有很多原因导致我们这样做),资源不会被释放和Excel保持打开状态。 当然,下次启动应用程序时......由于文件上有锁定,它会崩溃。

所以我正在寻找一种强制释放Excel对象的方法,即使用调试器停止也是如此。

有什么建议吗?

3 个答案:

答案 0 :(得分:14)

您可以使用DTE(VisualStudio自动化模型)编写将在停止调试发生时调用的宏,下面是该想法的片段。

Private Sub DebuggerEvents_OnEnterBreakMode(
   ByVal Reason As EnvDTE.dbgEventReason, 
   ByRef ExecutionAction As EnvDTE.dbgExecutionAction) Handles DebuggerEvents.OnEnterBreakMode
    If (Reason = dbgEventReason.dbgEventReasonStopDebugging) Then
        // DO YOUR CLEAN UP CODE HERE
    End If
End Sub

答案 1 :(得分:1)

不幸的是没有办法做到这一点。 visual studio中的停止按钮会终止进程,因此没有任何机会进行清理。

作为解决问题的一种可能方法(尽管不是很好),您可以编写一个清理例程并在停止应用程序之前从即时窗口手动执行它。

[编辑:不理我。这个答案是对的。 Shay Erlichmen提出了一个更好的解决方案,使用宏]

答案 2 :(得分:1)

一种可能性是切换到SpreadsheetGear for .NET等纯.NET解决方案,以摆脱与COM互操作相关的性能和可靠性问题。

免责声明:我拥有SpreadsheetGear LLC