2009-06-19 20 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似乎工作。