Question

Placez ce code quelque part dans une solution VSTO de niveau document Word en dehors de ThisDocument_Startup (créez un bouton de ruban avec un événement de clic):

int zero = 0;
int divideByZero = 10 / zero;

Commencez sans déboguer (Ctrl + F5), Résultat: une exception est avalée, le reste du code échoue en mode silencieux.

L'exception sera visible si elle est placée dans ThisDocument_Startup, mais elle n'apparaît nulle part ailleurs. Les forums VSTO de Microsoft et la documentation MSDN semblent donner l'impression que Try ... Catch doit être utilisé, ce qui n'est pas très grave pour les inconnus connus. Qu'en est-il des inconnues inconnues?

Tous les moyens courants de gestion des exceptions non gérées pour le code géré ne semblent pas fonctionner, probablement à cause de l'utilisation du code géré par VSTO avec Office Interops COM:

//These don't work
AppDomain.CurrentDomain.UnhandledException ...
System.Windows.Forms.Application.ThreadException ...

J'ai lu des articles sur le dépannage du code VSTO qui semblent toujours conduire à placer Try ... Attrapez pratiquement tout!

Existe-t-il un meilleur moyen de gérer les échecs connus et inconnus (maintenant invisibles et silencieux!)?

Était-ce utile?

La solution

En fait, il est très facile de définir la variable d'environnement VSTO_SUPPRESSDISPLAYALERTS sur 0 avant d'exécuter l'application Office. Office affichera les exceptions et ne supprimera pas votre complément au démarrage, même en cas de problème.

Il existe également un script PowerShell utile qui effectue ce type de tâche pour vous. Il est pratique pour déterminer si VSTO ne fonctionne pas à http://archive.msdn.microsoft.com/vstotroubleshooter Commencez par exécuter vstotroubleshooter.ps1 setdbg qui configurera pour vous la variable env VSTO_SUPPRESSDISPLAYALERTS

.

Autres conseils

Je pense que le problème n'est isolé que des exceptions relatives à l'interface utilisateur "complémentaire" " - ce qui se trouve être un paramètre direct trouvé ici (Word 2007):

Options Word > Avancé > Général > "Afficher les erreurs d'interface utilisateur du complément"

J'ai eu le même problème avec un complément d'application dans Word.

Si vous exécutez votre complément en le lançant à partir de Visual Studio avec F5, vous obtiendrez toujours le code "non géré par le code utilisateur". dans VS (par exemple 2008 SP1), sauf si:

  • vous désélectionnez le paramètre Visual Studio & Break; Interrompre lorsqu'une exception est .. non gérée par l'utilisateur " pour les exceptions CLR ou

  • vous appliquez librement l'annotation [System.Diagnostics.DebuggerNonUserCodeAttribute ()]. ??

Une fois que vous avez effectué l'une de ces tâches, UnhandledException / ThreadException semble fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top