【问题标题】:Visual Studio : executing clean up code when debugging stopsVisual Studio:调试停止时执行清理代码
【发布时间】:2009-06-23 15:47:34
【问题描述】:

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

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

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

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

有什么建议吗?

【问题讨论】:

    标签: c# visual-studio debugging


    【解决方案1】:

    您可以使用 DTE(VisualStudio 自动化模型)编写一个宏,当停止调试发生时将调用该宏,下面是这个想法的 sn-p。

    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
    

    【讨论】:

    • 很伤心,VS 2012+ 中没有宏。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      免责声明:我拥有 SpreadsheetGear LLC

      【讨论】:

      • 会很好,但有点贵,因为我们只需要读取一个 excel 文件:)。我研究了开源解决方案(如 Koogra koogra.sourceforge.net),但它不适用于我们的 XLS 文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多