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

C# Visual Studio:在调试停止时执行清理代码,c#,visual-studio,debugging,C#,Visual Studio,Debugging,我们开发了一个应用程序,它使用Excel互操作库(Microsoft.Office.interop.Excel)读取一些Excel文件 当应用程序中出现问题时,将处理事件application.ThreadException,从而释放资源(Excel关闭…) 问题是,当我们使用VS调试器时,如果我们停止执行(因为进程在异常或断点时中断,我们这样做有很多原因),资源不会被释放,Excel保持打开状态。 当然,下次启动应用程序时。。。它崩溃是因为文件上有锁 因此,我正在寻找一种强制释放Excel对象

我们开发了一个应用程序,它使用Excel互操作库(Microsoft.Office.interop.Excel)读取一些Excel文件

当应用程序中出现问题时,将处理事件application.ThreadException,从而释放资源(Excel关闭…)

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

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


有什么建议吗?

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

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

[编辑:忽略我。这个答案是错误的。Shay Erlichmen提出了一个更好的使用宏的解决方案]

您可以使用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

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


免责声明:我拥有SpreadsheetGear LLC(电子表格设备有限责任公司)

会很好,但有点贵,因为我们只需要读取excel文件:)。我研究过开源解决方案(比如Koogra),但它不适用于我们的XLS文件。