2009-06-23 10 views
7

Nous avons développé une application qui utilise des bibliothèques d'interopérabilité Excel (Microsoft.Office.Interop.Excel) pour lire certains fichiers Excel.Visual Studio: exécution du code de nettoyage lorsque le débogage s'arrête

Lorsqu'un problème survient dans l'application, l'événement Application.ThreadException est géré, de sorte que les ressources sont libérées (Excel est fermé ...). Le problème est que lorsque nous utilisons le débogueur VS, si nous arrêtons l'exécution (parce que le processus casse sur une exception, ou un point d'arrêt, il y a beaucoup de raisons pourquoi nous ferions cela), les ressources ne sont pas publié et Excel reste ouvert. Et bien sûr, la prochaine fois que l'application est lancée ... elle plante car il y a des verrous sur le fichier. Donc, je suis à la recherche d'un moyen de forcer la sortie des objets Excel, même lorsqu'il est arrêté avec le débogueur.

Une suggestion?

Répondre

14

Vous pouvez utiliser le DTE (VisualStudio Automation Model) pour écrire une macro qui sera invoquée lorsqu'un arrêt de débogage se produit, ci-dessous est un extrait de l'idée.

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

Nice. Obtient mon +1 –

+0

Intéressant. Une autre bonne utilisation des macros. – RichardOD

+3

Tellement triste, pas de macros dans VS 2012+. – roufamatic

1

Malheureusement, il n'y a pas moyen de le faire. Le bouton d'arrêt dans le studio visuel tue le processus, donc il n'a aucune chance de nettoyer. Pour contourner votre problème (bien que pas très bon), vous pouvez écrire une routine de nettoyage et l'exécuter manuellement à partir de la fenêtre immédiate avant d'arrêter l'application.

[Modifier: Ignore moi. Cette réponse est fausse. Shay Erlichmen a trouvé une meilleure solution en utilisant une macro]

+3

jamais dire jamais –

1

Une possibilité est de passer à une solution pure .NET, comme pour échapper aux problèmes de performance et de fiabilité associés à COM Interop.

Disclaimer: Je possède SpreadsheetGear LLC

+0

Serait bien mais un peu cher car nous avons juste besoin de lire un fichier Excel :). J'ai regardé dans des solutions open source (comme Koogra http://koogra.sourceforge.net/) mais cela ne fonctionne pas avec nos fichiers XLS. –

Questions connexes