Word VSTO глотает исключения во время выполнения без отладки? - PullRequest
18 голосов
/ 19 июня 2009

Поместите этот код где-нибудь в решение VSTO на уровне документа Word вне ThisDocument_Startup (создать кнопку на ленте с событием щелчка):

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

Запуск без отладки (Ctrl + F5), Результат: исключение проглочено, остальная часть кода завершается с ошибкой.

Исключение будет видимым, если оно помещено в ThisDocument_Startup, но больше нигде не отображается. Форумы Microsoft VSTO и документация MSDN, кажется, чувствуют, что Try ... Catch следует использовать - что не так уж важно для известных неизвестных. А как насчет неизвестных неизвестных?

Кажется, что все распространенные способы обработки необработанных исключений для управляемого кода не работают, возможно, из-за того, что VSTO использует управляемый код с Office COM Interops:

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

Я читал сообщения о поиске и устранении неисправностей кода VSTO, который, кажется, всегда приводит к установке Try ... Поймать практически все!

Есть ли лучший способ обработки известных и неизвестных (теперь невидимых и тихих!) Сбоев?

Ответы [ 3 ]

10 голосов
/ 23 мая 2011

На самом деле это довольно просто, установите переменную среды VSTO_SUPPRESSDISPLAYALERTS на 0 до запуска приложения Office, затем Office будет отображать исключения и не уничтожать надстройку во время запуска при возникновении проблем.

Существует также полезный скрипт для PowerShell, который будет делать такие вещи для вас и удобен при выяснении, когда VSTO не работает на http://archive.msdn.microsoft.com/vstotroubleshooter Начните с запуска vstotroubleshooter.ps1 setdbg, который установит переменную env VSTO_SUPPRESSDISPLAYALERTS для вас

2 голосов
/ 30 сентября 2009

Я думаю, что проблема изолирована только для исключений вокруг «пользовательского интерфейса надстройки» - что является прямой настройкой, найденной здесь (Word 2007):

Параметры Word> Дополнительно> Общие> «Показать ошибки интерфейса пользователя надстройки»

0 голосов
/ 04 ноября 2009

У меня была такая же проблема с надстройкой уровня приложения в Word.

Если вы запускаете надстройку, запуская ее из Visual Studio с F5, вы всегда будете получать «необработанный код пользователя» в VS (например, 2008 SP1), если только:

  • вы снимаете флажок для параметра Visual Studio «Разорвать, когда исключение является… необработанным пользователем» для исключений CLR, или

  • вы свободно применяете аннотацию [System.Diagnostics.DebuggerNonUserCodeAttribute ()]. ​​

После того, как вы сделали одно из этих действий, UnhandledException / ThreadException, похоже, сработают.

...