Word VSTO сглаживает исключения во время выполнения без отладки?
Поместите этот код где-нибудь на уровне документа документа VSTO-решения за пределами этого документа Document_Startup (создайте кнопку ленты с событием клика):
int zero = 0;
int divideByZero = 10 / zero;
Начать без отладки (Ctrl + F5), Результат: Исключение проглатывается, остальная часть кода терпит неудачу.
Исключение будет видно, если оно помещено в ThisDocument_Startup, но оно больше нигде не появляется. Microsoft VSTO-форумы и документация MSDN кажутся Try Try... Catch следует использовать - что не очень важно для известных неизвестных. Как насчет неизвестных неизвестных?
Все распространенные способы борьбы с необработанными исключениями для управляемого кода, похоже, не работают, по-видимому, из-за использования VSTO с помощью управляемого кода с помощью Office COM Interops:
//These don't work
AppDomain.CurrentDomain.UnhandledException ...
System.Windows.Forms.Application.ThreadException ...
Я читал сообщения об устранении неполадок кода VSTO, который всегда, кажется, приводит к установке Try... Поймать практически все!
Есть ли лучший способ справиться с известными и неизвестными (теперь невидимыми и бесшумными!) неудачами?
Ответы
Ответ 1
На самом деле это довольно просто, установите для переменной окружения VSTO_SUPPRESSDISPLAYALERTS значение 0 перед запуском офисного приложения, тогда Office будет отображать исключения и не убивать вашу надстройку во время запуска при возникновении проблем.
Существует также полезная powershell script, которая будет делать такие вещи для вас и удобна при вычислении, когда VSTO не работает на http://archive.msdn.microsoft.com/vstotroubleshooter
Начните с запуска vstotroubleshooter.ps1 setdbg
, который установит для вас переменную env VSTO_SUPPRESSDISPLAYALERTS
Ответ 2
Я думаю, что проблема изолирована только от исключений вокруг "дополнительного пользовательского интерфейса" - которая, как представляется, является прямой установкой, найденной здесь (Word 2007):
Параметры Word > Дополнительно > Общие > "Показывать ошибки пользовательского интерфейса надстройки"
Ответ 3
я могу получить
************** Исключительный текст **************
System.DivideByZeroException: Попытка деления на ноль.
с проектом добавления уровня приложения.
Вы видите это только с помощью проектов настройки уровня Doc? Также только в слове или это также происходит в Excel?
Ответ 4
У меня была такая же проблема с надстройкой уровня приложения в Word.
Если вы запускаете свою надстройку, запустив ее из Visual Studio с F5, вы всегда получите "необработанный по пользовательскому коду" в VS (например, 2008 SP1), если:
-
вы снимите отметку с параметра Visual Studio "Перерыв, когда исключение... пользовательское необработанное" для исключений CLR или
-
вы свободно применяете аннотацию [System.Diagnostics.DebuggerNonUserCodeAttribute()].
Как только вы сделали одно из них, кажется, что работает UnhandledException/ThreadException.