2009-06-19 57 views
18

将此代码放在ThisDocument_Startup之外的Word文档级别VSTO解决方案的地方(创建一个功能区按钮,一个点击事件):Word VSTO在运行时吞下异常而无需调试?

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

不开始调试(按Ctrl + F5),结果:异常吞咽,其他代码默默地失败。

例外放置在ThisDocument_Startup中可见,但它不会出现在其他地方。微软的VSTO论坛和MSDN文档似乎觉得Try ... Catch应该被使用 - 对已知的未知数来说这不是什么大问题。未知的未知数呢?

所有处理托管代码未处理异常的常用方法似乎并不使用与Office COM互操作性展示托管代码工作,因为VSTO的大概:

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

我读过有关解决VSTO职位总是似乎导致放置的代码尝试...几乎抓住每件事物!

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

+0

上手时会做这样的东西,你是得心应手要小心,Word还会尝试禁用引发异常的加载项;) – Tangocoder 2012-09-28 22:17:24

回答

10

其实很简单,在运行Office应用程序之前将环境变量VSTO_SUPPRESSDISPLAYALERTS设置为0,Office将在启动期间显示异常并且不会在启动时杀死加载项。

还有一个有用的PowerShell脚本搞清楚当VSTO不http://archive.msdn.microsoft.com/vstotroubleshooter 工作运行vstotroubleshooter.ps1 setdbg这将设置你的VSTO_SUPPRESSDISPLAYALERTS环境变量

0

我可以得到 **************例外文本************** System.DivideByZeroException:试图除以零。

与应用程序级插件项目。

您是否只在Doc级别定制项目中看到此项目?也只有在词或这也发生在Excel中?

+0

我对我的不精确性表示歉意 - 是的,仅适用于Word中的Doc级项目。 – 2009-06-24 15:24:59

2

我认为这个问题是孤立只围绕例外“添加的用户界面” - 这恰好是直接设置在这里找到(Word 2007中):

Word选项>高级>常规>“展附加用户界面错误“

+0

您是否知道Word 2003是否有相应的选项?我努力在MS Word应用程序级VSTO加载项中获得适当的异常处理。我已经按照你的问题添加了异常处理程序,但它们从来没有触发过... – 2009-12-10 03:47:35

+0

我不知道2003年的一个。对于我们在Office 2007中的VSTO应用程序,我们必须仔细地尝试......抓住所有事物以日志和安全拆除为未知的例外。 – 2009-12-10 06:04:34

0

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

如果你是从Visual Studio与F5启动它运行您的加载,那么你将永远在VS(如2008 SP1)获得“由用户代码未处理的”,除非:

  • 您可以取消选中Visual Studio设置中的CLR例外情况下“发生例外情况时用户未处理的情况”或

  • 您自由应用[System.Diagnostics.DebuggerNonUserCodeAttribute()]批注。

一旦你做了其中的一个,UnhandledException/ThreadException似乎工作。