Вопрос по visual-studio, debugging, c# – Visual Studio: выполнение кода очистки после остановки отладки

8

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

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

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

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

Любое предложение ?

Ваш Ответ

3   ответа
1

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

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

Было бы неплохо, но немного дороже, так как нам просто нужно прочитать файл Excel :). Я искал решения с открытым исходным кодом (например, Koograkoogra.sourceforge.net), но он не работает с нашими файлами XLS. Julien N
1

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

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

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

никогда не говори никогда
14

исания макроса, который будет вызываться при остановочной отладке, ниже приведен фрагмент идеи.

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+ нет макросов.
Ницца. Получает +1

Похожие вопросы