将此代码放在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 ...抓住几乎所有东西!
有没有更好的方法来处理已知和未知(现在看不见和沉默!)的失败?
答案 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似乎有效。