Word VSTO在运行时吞没异常而无需调试?

时间:2009-06-19 15:59:02

标签: ms-word vsto

将此代码放在ThisDocument_Startup之外的Word文档级别VSTO解决方案中(创建带状按钮,带有单击事件):

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

启动而不调试(Ctrl + F5),结果:吞下异常,其余代码无声地失败。

如果放在ThisDocument_Startup中,可见,但它似乎无处可见。微软的VSTO论坛和MSDN文档似乎觉得尝试...应该使用Catch - 这对于已知的未知数并不是什么大问题。未知的未知数怎么办?

处理托管代码的未处理异常的所有常见方法似乎都不起作用,大概是因为VSTO使用托管代码与Office COM Interops:

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

我已经阅读了关于排除VSTO代码问题的帖子,这些代码似乎总是导致放置Try ...抓住几乎所有东西!

有没有更好的方法来处理已知和未知(现在看不见和沉默!)的失败?

3 个答案:

答案 0 :(得分:10)

实际上很容易,在运行office应用程序之前将环境变量VSTO_SUPPRESSDISPLAYALERTS设置为0,然后Office会显示异常,并且在启动时不会在出现问题时终止加载项。

还有一个有用的powershell脚本可以为你做这类事情,并且在确定VSTO何时无法在http://archive.msdn.microsoft.com/vstotroubleshooter工作时很方便 通过运行vstotroubleshooter.ps1 setdbg开始,它将为您设置VSTO_SUPPRESSDISPLAYALERTS env变量

答案 1 :(得分:2)

我认为问题仅与“加载项用户界面”的例外有关 - 这恰好是此处的直接设置(Word 2007):

Word选项>高级>一般> “显示加载项用户界面错误”

答案 2 :(得分:0)

我在Word中遇到了与应用程序级加载项相同的问题。

如果您通过使用F5从Visual Studio中启动加载项来运行加载项,那么在VS(例如2008 SP1)中,您将始终得到“用户代码未处理”,除非:

  • 取消选中Visual Studio设置“当异常为..用户未处理时中断”,用于CLR例外,或者

  • 您可以自由地应用[System.Diagnostics.DebuggerNonUserCodeAttribute()]注释。

完成其中一项后,UnhandledException / ThreadException似乎有效。