Visual Studio: выполнение кода очистки после остановки отладки - PullRequest
8 голосов
/ 23 июня 2009

Мы разработали приложение, которое использует библиотеки взаимодействия Excel (Microsoft.Office.Interop.Excel) для чтения некоторых файлов Excel.

Когда в приложении возникает проблема, обрабатывается событие Application.ThreadException, поэтому ресурсы освобождаются (Excel закрывается ...).

Проблема в том, что когда мы используем отладчик VS, если мы останавливаем выполнение (поскольку процесс прерывается на исключение или точку останова, есть много причин, по которым мы это делаем), ресурсы не освобождаются и Excel остается открытым. И, конечно же, в следующий раз, когда приложение запускается ... оно падает, потому что файл заблокирован.

Поэтому я ищу способ принудительного освобождения объектов Excel, даже если остановлен с помощью отладчика.

Есть предложения?

Ответы [ 3 ]

14 голосов
/ 23 июня 2009

Вы можете использовать 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 голос
/ 23 июня 2009

Одна возможность - перейти на чистое решение .NET, такое как SpreadsheetGear for .NET , чтобы избежать проблем с производительностью и надежностью, связанных с COM-взаимодействием.

Отказ от ответственности: я владею SpreadsheetGear LLC

1 голос
/ 23 июня 2009

К сожалению, нет способа сделать это. Кнопка останова в visual studio убивает процесс, поэтому у него нет шансов на очистку.

В качестве возможного способа решения вашей проблемы (хотя и не очень удачной) вы можете написать процедуру очистки и выполнить ее вручную из непосредственного окна перед остановкой приложения.

[Редактировать: игнорировать меня. Этот ответ неверен. Шей Эрличмен придумал гораздо лучшее решение, используя макрос]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...