Palavra VSTO engole exceções em tempo de execução, sem a depuração?
Pergunta
Coloque isso em algum lugar do código em uma Palavra nível do documento solução VSTO fora do ThisDocument_Startup (criar um botão de fita, com um evento de clique):
int zero = 0;
int divideByZero = 10 / zero;
Iniciar sem depuração (Ctrl + F5), Resultado:. Exceção é engolido, o resto do código falha silenciosamente
A exceção irá ser visível se colocado em ThisDocument_Startup, mas parece que em nenhum outro lugar. fóruns VSTO da Microsoft e a documentação MSDN parecem sentir try ... catch deve ser usado - o que não é um grande negócio para incógnitas conhecidas. E sobre as incógnitas desconhecidas?
Todas as formas comuns de lidar com exceções não tratadas para código gerenciado não parecem trabalho, presumivelmente por causa do VSTO usando código gerenciado com o Office COM Interops:
//These don't work
AppDomain.CurrentDomain.UnhandledException ...
System.Windows.Forms.Application.ThreadException ...
Eu li posts sobre solução de problemas código VSTO que parece sempre levar a colocar try ... catch em torno de praticamente tudo!
Existe alguma maneira melhor de lidar com conhecidos e desconhecidos (agora invisível e silencioso!) Falhas?
Solução
Na verdade, é bastante fácil, defina as VSTO_SUPPRESSDISPLAYALERTS variáveis ??ambientais para 0 antes de executar o aplicativo de escritório, em seguida, Office irá exibir exceções e não matar o seu add-in durante a inicialização quando há problemas.
Há também um script powershell útil que vai fazer esse tipo de coisa para você e é útil quando descobrir quando VSTO não trabalhar em http://archive.msdn.microsoft.com/vstotroubleshooter
Comece executando vstotroubleshooter.ps1 setdbg
que irá configurar os VSTO_SUPPRESSDISPLAYALERTS env variável para você
Outras dicas
Eu acho que o problema é isolado apenas de excepções ao redor do "add-in interface de usuário" - que acontece de ser um ajuste direto encontrada aqui (Word 2007):
Opções do Word> Avançado> Geral> "Mostrar Add-in de usuário erros de interface"
Eu tive o mesmo problema com um nível de aplicativo add-in no Word.
Se você estiver executando o seu add-in, lançando-lo do Visual Studio com F5, então você vai sempre se "não tratada pelo código do usuário" no VS (eg 2008 SP1), a menos que:
-
você desmarcar a configuração do Visual Studio "Pausa quando uma exceção é .. user-não tratada" para exceções CLR, ou
-
Você liberalmente aplicar o [System.Diagnostics.DebuggerNonUserCodeAttribute) (] anotação.
Depois de ter feito um desses, UnhandledException / ThreadException parecem funcionar.