2009-06-23 13 views
7

Desarrollamos una aplicación que usa las bibliotecas de interoperabilidad de Excel (Microsoft.Office.Interop.Excel) para leer algunos archivos de Excel.Visual Studio: ejecutar el código de limpieza cuando se detiene la depuración

Cuando se produce un problema en la aplicación, se gestiona el evento Application.ThreadException, por lo que se liberan los recursos (Excel está cerrado ...).

El problema es que cuando utilizamos el depurador VS, si detenemos la ejecución (porque el proceso se rompe en una excepción, o en un punto de interrupción, hay muchas razones por las que lo haríamos), los recursos no son lanzado y Excel permanece abierto. Y, por supuesto, la próxima vez que se inicie la aplicación ... se bloquea porque hay bloqueos en el archivo.

Así que estoy buscando una manera de forzar la liberación de los objetos de Excel, incluso cuando se detuvo con el depurador.

¿Alguna sugerencia?

Respuesta

14

Puede usar el DTE (modelo de automatización de VisualStudio) para escribir una macro que se invocará cuando se produzca una detención de depuración, a continuación se muestra un fragmento de la idea.

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 
+0

Niza. Obtiene mi +1 –

+0

Interesante. Otro buen uso de Macros. – RichardOD

+3

Tan triste, no hay macros en VS 2012+. – roufamatic

1

Lamentablemente, no hay una forma de hacerlo. El botón de detención en Visual Studio mata el proceso, por lo que no tiene ninguna posibilidad de limpieza.

Como una posible solución a su problema (aunque no muy buena), puede escribir una rutina de limpieza y ejecutarla manualmente desde la ventana inmediata antes de detener la aplicación.

[Editar: Ignorarme. Esta respuesta es incorrecta Shay Erlichmen ha encontrado una solución mucho mejor usando una macro]

+3

Nunca digas nunca –

1

Una posibilidad es cambiar a una solución .NET pura como para alejarse de las prestaciones y fiabilidad problemas asociados con la interoperabilidad COM.

exención de responsabilidad: Tengo SpreadsheetGear LLC

+0

Sería bueno pero un poco caro ya que solo necesitamos leer un archivo de Excel :). Busqué soluciones de código abierto (como Koogra http://koogra.sourceforge.net/) pero no funciona con nuestros archivos XLS. –

Cuestiones relacionadas