Ms word Word VSTO在运行时接受异常而不进行调试?

Ms word Word VSTO在运行时接受异常而不进行调试?,ms-word,vsto,Ms Word,Vsto,将此代码放在Word文档级VSTO解决方案中此文档\u启动之外的某个位置(创建一个功能区按钮,带有单击事件): 启动而不调试(Ctrl+F5),结果:异常被吞没,其余代码以静默方式失败 如果将异常放置在此文档中,则该异常将可见,但它不会出现在其他位置。微软的VSTO论坛和MSDN文档似乎觉得应该使用Try…Catch,这对于已知的未知因素来说并不是什么大问题。那么未知的未知呢 所有处理托管代码未处理异常的常用方法似乎都不起作用,这可能是因为VSTO在Office COM互操作中使用托管代码: /

将此代码放在Word文档级VSTO解决方案中此文档\u启动之外的某个位置(创建一个功能区按钮,带有单击事件):

启动而不调试(Ctrl+F5),结果:异常被吞没,其余代码以静默方式失败

如果将异常放置在此文档中,则该异常将可见,但它不会出现在其他位置。微软的VSTO论坛和MSDN文档似乎觉得应该使用Try…Catch,这对于已知的未知因素来说并不是什么大问题。那么未知的未知呢

所有处理托管代码未处理异常的常用方法似乎都不起作用,这可能是因为VSTO在Office COM互操作中使用托管代码:

//These don't work
AppDomain.CurrentDomain.UnhandledException ...
System.Windows.Forms.Application.ThreadException ...
我读过一些关于VSTO代码疑难解答的帖子,这些代码似乎总是导致将Try…Catch放在几乎所有的东西上


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

我认为这个问题只存在于“外接程序用户界面”的例外情况中,而“外接程序用户界面”恰好是此处的直接设置(Word 2007):


Word选项>高级>常规>“显示外接程序用户界面错误”

Word中的应用程序级外接程序也存在同样的问题

如果通过使用F5从Visual Studio启动外接程序来运行外接程序,则在VS(例如2008 SP1)中,您将始终获得“未经用户代码处理的”,除非:

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

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


完成其中一项后,UnhandledException/ThreadException似乎可以正常工作。

实际上,在运行office应用程序之前,将环境变量VSTO\u SUPPRESSDISPLAYALERTS设置为0非常简单,然后office将显示异常,并且在启动时不会在出现问题时终止外接程序

还有一个有用的powershell脚本,它将为您完成这类工作,并且在计算VSTO何时不工作时非常方便
首先运行
vstotroubleshooter.ps1 setdbg
,它将为您设置VSTO_SUPPRESSDISPLAYALERTS env变量

您知道Word 2003是否有等效选项吗?我正在努力在MS Word应用程序级VSTO插件中获得正确的异常处理。我已经根据你的问题添加了异常处理程序,但它们从未触发过…我不知道2003年有一个异常处理程序。对于Office2007中的VSTO应用程序,我们必须仔细尝试…通过日志记录和未知异常的安全删除来捕获所有内容。谢谢Mike。我注意到您的问题是关于文档级加载项的。您是否完成了任何应用程序级加载项,是否成功地让全局错误处理程序为VSTO应用程序级加载项工作,或者您是否也必须为它们设置try/catch?是的,应用程序级加载项也有类似的不幸经历。我最终将try..catch放在调用堆栈的最低级别(仍然到处都是)来处理异常。小心,Word还会尝试禁用引发异常的加载项;)链接不起作用。上面写着“存档库已退役”。以下是存档链接:
//These don't work
AppDomain.CurrentDomain.UnhandledException ...
System.Windows.Forms.Application.ThreadException ...