Domanda

Posiziona questo codice da qualche parte in una soluzione VSTO a livello di documento Word all'esterno di ThisDocument_Startup (crea un pulsante multifunzione, con un evento clic):

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

Inizia senza eseguire il debug (Ctrl + F5), Risultato: l'eccezione viene ingoiata, il resto del codice fallisce silenziosamente.

L'eccezione sarà visibile se inserita in ThisDocument_Startup, ma non appare da nessun'altra parte. I forum VSTO di Microsoft e la documentazione MSDN sembrano ritenere Try ... Catch dovrebbe essere usato, il che non è un grosso problema per sconosciuti noti. E le incognite sconosciute?

Tutti i modi comuni di gestire le eccezioni non gestite per il codice gestito non sembrano funzionare, presumibilmente a causa del VSTO che utilizza il codice gestito con gli interoperabilità COM di Office:

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

Ho letto post sulla risoluzione dei problemi del codice VSTO che sembra sempre portare a provare Try ... Catch around praticamente tutto!

Esiste un modo migliore per gestire i guasti noti e sconosciuti (ora invisibili e silenziosi!)?

È stato utile?

Soluzione

In realtà è abbastanza semplice, impostare la variabile ambientale VSTO_SUPPRESSDISPLAYALERTS su 0 prima di eseguire l'applicazione di Office, quindi Office visualizzerà le eccezioni e non ucciderà il componente aggiuntivo durante l'avvio in caso di problemi.

Esiste anche un utile script PowerShell che farà questo tipo di cose per te ed è utile per capire quando VSTO non funziona in http://archive.msdn.microsoft.com/vstotroubleshooter Inizia eseguendo vstotroubleshooter.ps1 setdbg che imposterà la variabile env VSTO_SUPPRESSDISPLAYALERTS per te

Altri suggerimenti

Penso che il problema sia isolato solo dalle eccezioni relative all'interfaccia utente "add-in" " - che sembra essere un'impostazione diretta trovata qui (Word 2007):

Opzioni di Word > Avanzato > Generale > " Mostra errori dell'interfaccia utente del componente aggiuntivo "

Ho avuto lo stesso problema con un componente aggiuntivo a livello di applicazione in Word.

Se stai eseguendo il componente aggiuntivo avviandolo da Visual Studio con F5, allora sarai sempre "non gestito dal codice utente". in VS (ad es. SP1 2008), a meno che:

  • deselezioni l'impostazione di Visual Studio " Break quando un'eccezione è ... non gestita dall'utente " per le eccezioni CLR o

  • applichi liberamente l'annotazione [System.Diagnostics.DebuggerNonUserCodeAttribute ()]. ??

Dopo aver fatto uno di questi, UnhandledException / ThreadException sembra funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top