Office 方案的執行階段錯誤疑難排解

更新:2010 年 9 月

當您於執行階段在以 Visual Studio 建立的 Office 方案中執行下列工作時,可能會遇到一些問題:

  • 安裝方案

  • 載入或執行方案

  • 在方案中使用特定屬性、方法和事件

  • 自訂 UI

  • 將資料繫結至控制項並快取資料

  • 使用 ServerDocument 類別

安裝方案

對於當您安裝或解除安裝 Office 方案時擲回的所有例外狀況,Visual Studio Tools for Office Runtime 會將相關訊息寫入至 Windows 事件檢視器。 您可以使用這些訊息,解決安裝和部署問題。 如需詳細資訊,請參閱 Office 方案的事件記錄

當您安裝 Office 方案時,可能會遇到下列錯誤。

無法使用 COM 增益集對話方塊安裝增益集

如果您嘗試使用 Office 應用程式中的 [COM 增益集] 對話方塊,安裝以 Visual Studio 中的 Office 開發人員工具建立的增益集,您會看到下列錯誤:

「your add-in name.dll 不是有效的 Office 增益集。」

您無法使用 [COM 增益集] 對話方塊來安裝使用 Visual Studio 中的 Office 開發人員工具建立的增益集。 但是,您可以執行下列任一步驟:

  • 如果您嘗試在開發電腦上執行增益集,請建置專案,然後啟動 Office 應用程式。 您的增益集應該會自動載入。 或者,在 Visual Studio 的 [偵錯] 功能表上,按一下 [啟動但不偵錯]。 如需詳細資訊,請參閱 Office 方案建置程序概觀

  • 如果您嘗試在開發電腦上對增益集進行偵錯,請按 F5 或按一下 Visual Studio 中 [偵錯] 功能表上的 [開始偵錯]。 如需詳細資訊,請參閱在應用程式層級專案中進行偵錯

  • 如果您嘗試在使用者電腦上安裝增益集,請使用 ClickOnce 或 Windows Installer 來部署增益集。 如需詳細資訊,請參閱部署 Office 方案

方案安裝成功,但事件檢視器回報 FrameworkVersionMismatchException

當您安裝使用 Visual Studio 建立的 Office 方案時,可能會在事件檢視器中看到參考所擲回 Microsoft.VisualStudio.Tools.Applications.Deloyment.FrameworkVersionMismatchException 的錯誤。 這個例外狀況並不表示方案實際發生錯誤,您通常可予以忽略。

當您在已同時安裝 .NET Framework 3.5 和 .NET Framework 4 的電腦上安裝以 .NET Framework 4 為目標的 Office 方案時,Visual Studio Tools for Office Runtime 會在內部擲回及攔截這個例外狀況。 Visual Studio Tools for Office Runtime 會使用這個例外狀況判斷要為方案載入的 Common Language Runtime (CLR) 版本。

載入或執行方案

Visual Studio Tools for Office Runtime 可以將啟動期間發生的所有錯誤寫入至記錄檔,或在訊息方塊中顯示每則錯誤。 這些選項預設是處於停用狀態。 您可以建立環境變數,以開啟這些選項。 如需詳細資訊,請參閱在文件層級專案中進行偵錯在應用程式層級專案中進行偵錯

當您載入或執行 Office 方案時,可能會遇到下列錯誤。

無法載入 Common Language Runtime 或 Microsoft .NET Framework

使用者的電腦必須具有方案的目標 .NET Framework 版本。 如需您可以在 Office 解決方案中設為目標之 .NET Framework 版本的詳細資訊,請參閱設計和建立 Office 方案

找不到或無法載入組件

這個問題造成下列錯誤訊息出現。

「找不到或無法載入自訂組件。 您仍然可以編輯與儲存文件。 如需進一步協助,請聯絡您的系統管理員或本文件作者。」

若要解決這個錯誤,請嘗試下列選項:

  • 檢查使用者是否擁有這個組件位置的存取權限,以及所指名的組件是否存在。 如需詳細資訊,請參閱 Office 方案中的組件概觀

  • 如果組件可以使用,請檢查 Word 或 Excel 是否正在執行已明確載入 .NET Framework 1.1 的自訂項目,例如增益集、智慧標籤或智慧文件。 若要解決這個問題,請停用任何會明確載入 .NET Framework 1.1 的自訂項目。 這個版本的 .NET Framework 無法與更新版本的 .NET Framework 一起載入到同一個應用程式處理序中。 如需詳細資訊,請參閱同處理序並存執行

    注意事項注意事項

    智慧標籤在 Excel 2010 和 Word 2010 中已被取代。 如需詳細資訊,請參閱智慧標籤概觀

  • 檢查自訂組件中是否有未處理的例外狀況,導致組件無法載入。 請使用設定為中斷 Common Language Runtime 例外狀況的偵錯工具來偵錯您的方案,或是在 [選項] 對話方塊中選取 [例外狀況為跨 AppDomain 或 Managed/原生界限時中斷] 選項。 如需詳細資訊,請參閱 HOW TO:處理 Office 專案中的錯誤

  • 您可以藉由設定環境變數,讓 Visual Studio Tools for Office Runtime 顯示詳細的錯誤訊息並將所有動作寫入記錄檔,以取得其他疑難排解資訊。 如需詳細資訊,請參閱在文件層級專案中進行偵錯在應用程式層級專案中進行偵錯

增益集未載入或停用

有幾種可能情況需要檢查應用程式層級增益集是否未能正確載入:

  • 如果 Microsoft Office 應用程式意外結束,或是增益集正在初始化時發生錯誤,則應用程式可能會停用增益集。 如需詳細資訊,請參閱 HOW TO:重新啟用已停用的增益集

  • Microsoft Office 應用程式可能正在執行已明確載入 .NET Framework 1.1 的增益集。 若要解決這個問題,請停用任何會明確載入 .NET Framework 1.1 的增益集。 這個版本的 .NET Framework 無法與更新版本的 .NET Framework 一起載入到同一個應用程式處理序中。 如需詳細資訊,請參閱同處理序並存執行

  • 您可以藉由設定環境變數,讓 Visual Studio Tools for Office Runtime 顯示詳細的錯誤訊息並將所有動作寫入記錄檔,以取得其他疑難排解資訊。 如需詳細資訊,請參閱在應用程式層級專案中進行偵錯

無法載入型別

這個問題造成下列錯誤訊息出現:

「無法從組件 assemblyname 載入型別 projectname。」

如果您模糊 Office 專案中的程式碼,則可能會出現這個訊息。 模糊化程式碼會變更所有類別的名稱。 不過,資訊清單中會參考原始類別名稱,而模糊工具不會變更資訊清單。

為避免發生這個錯誤,請將專案中所產生類別的名稱加入至模糊工具的不重新命名類別清單中。

Office 文件開啟時未發生錯誤,但程式碼不執行

程式碼未執行而且未出現錯誤訊息的原因包括:

  • 全域組件快取中未安裝 Office 主要 Interop 組件 (PIA),可能是因為電腦上未安裝 .NET Framework,或未在 Office 安裝期間安裝 PIA 。

  • Word 文件會在同一部電腦的 Visual Studio 中開啟。 關閉 Visual Studio 並重新開啟文件。

如需詳細資訊,請參閱在文件層級專案中進行偵錯

在方案中使用特定屬性、方法和事件

您可能會在 Microsoft Office 主要 Interop 組件 (PIA) 和 Visual Studio Tools for Office Runtime 中遇到與特定屬性、方法和事件相關的下列問題。

在 Word 中開啟文件時未引發 DocumentChange 事件

當現用文件變更時,會引發 DocumentChange 事件, 而且通常在開啟文件時也會引發這個事件。 但是,由於 Word 可以不同方式開啟文件 (例如,從命令列、從 Windows 檔案總管或從 Word 中的 [檔案] 功能表),所以開啟文件時不一定會引發 DocumentChange 事件。 但是在開啟之後,如果現用文件變更了,應該會引發這個事件。 如果您要在文件開啟時執行動作,請使用 Startup 事件。

在 Internet Explorer 中引發的 Excel 事件與 Excel 中的不同

如果在 Internet Explorer 內裝載活頁簿,引發事件的順序會與在 Excel 中開啟活頁簿時不同。 此外,某些事件會引發兩次。 如果您的方案包含 Internet Explorer,請測試不同的事件順序對方案運作的影響。

從範本建立文件時未引發 New 事件

當您使用命令提示字元開啟 Word 範本並建立新文件時,必須使用 /z 參數引發 New 事件。 在 /z 之後不要加空格,否則 Word 會開啟範本進行編輯,而不是依據範本建立新文件。 例如 winword.exe /z"mytemplate.dot"。

這和使用 /t 參數的情況類似,不過 /z 會引發 New 事件。

開啟 XML 工作表時未引發 Open 事件

如果您的 Excel 專案使用現有非原生工作表 (例如 Excel XML 格式),那麼開啟工作表時不會引發 Open 事件。

BeforeClose 方法已執行,但使用者仍然讓活頁簿保持開啟

即使呼叫 BeforeClose 事件處理常式之後,使用者仍然可能取消關閉活頁簿並繼續使用您的方案。 如果使用者在工作表中做了某些變更,然後不先存檔就以某種動作關閉活頁簿,就會發生這種情況。 這時會呼叫 BeforeClose 事件處理常式,然後顯示一個可以讓使用者選擇取消關閉的對話方塊。

如果您將關閉資料庫連接或執行其他清除動作的程式碼放在 BeforeClose 事件處理常式中,那麼有可能呼叫該程式碼,但同時使用者仍在使用方案。

設定 SaveAs 對話方塊的 Cancel 參數時,會傳回不正確的警告或造成 Word 非預期地結束

如果在 DocumentBeforeSave 事件的事件處理常式中顯示 [SaveAs] 對話方塊,並將 Cancel 參數設為 false,則應用程式可能會非預期地結束。 如果將 Cancel 參數設為 true,則會出現錯誤訊息,表示 Autosave 已停用。

Close 方法會導致 Word 與 Excel 非預期地結束

當您從非強制回應的表單呼叫文件或活頁簿的 Close 方法時,應用程式可能會非預期地結束。 所有開啟的文件或活頁簿都會關閉,而資料就可能會遺失。 如果 Microsoft Office Outlook 使用 Word 做為其電子郵件編輯器,則所有開啟的電子郵件可能會關閉。 如果您在處理 AppDomain.DomainUnload 事件時顯示 Windows Form 或訊息方塊,也可能會發生這種情形。

若要解決這個問題,請不要從非強制回應表單或非強制回應表單的事件中呼叫 Close 方法。 請改用下列的程序。

  • 如果您必須從表單關閉文件,則使用強制回應表單 (例如使用 ShowDialog 而非 Show)。

  • 如果您必須使用非強制回應表單,請確定在嘗試關閉文件或活頁簿之前,非強制回應表單是關閉的,而且表單參考已完全終結。 下列程式碼示範一個範例。 若要使用這段程式碼,請在 Word 文件層級專案的 ThisDocument 類別中執行它。

    Dim form1 As SampleForm
    
    Sub OpenForm()
        form1 = New SampleForm
        form1.Show()  ' Show the form modelessly.
    End Sub
    
    Sub ForceShutdown()
    
        ' Completely close the form if it is still running.
        ' Note that hiding the form might not work by itself.
    
        If (Not form1 Is Nothing) Then
            form1.Close()
            form1.Dispose()
            form1 = Nothing
        End If
    
        Me.Close()
    End Sub
    
    SampleForm form1;
    
    private void OpenForm()
    {
        form1 = new SampleForm();
        form1.Show();  // Show form modelessly.
    }
    
    private void ForceShutdown()
    {
        // Completely close the form if it is still running.
        // Note that hiding the form might not work by itself.
    
        if (form1 != null)
        {
            form1.Close();
            form1.Dispose();
            form1 = null;
        }
        object saveChanges = Word.WdSaveOptions.wdSaveChanges; 
        this.Close(ref saveChanges, ref missing, ref missing);
    }
    

如需在 C# 中傳遞 missing 參數的詳細資訊,請參閱Office 方案中的選擇性參數

將 Excel 主控制項傳遞到方法時擲回 InvalidCastException

Excel 中的某些方法和屬性需要您傳遞原生 (Native) Office 物件給它們。 如果在目標為 .NET Framework 3.5 的專案中 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute 屬性設定為 false,而且您傳入以原生 Office 物件為基礎的主控制項,則它會擲回 InvalidCastException。 您可以使用主控制項的 InnerObject 屬性,將基礎原生 Office 物件傳遞給這些方法和屬性。 如需 Excel 中當地語系化問題的詳細資訊,請參閱使用各種地區設定,在 Excel 中格式化資料

自訂 UI

您可能會遇到與 Office 方案中特定類型的 UI 自訂項目相關的下列錯誤。

分割 Excel 工作表視窗時,Windows Form 控制項發生無法預期的行為

如果您分割含有 Windows Form 控制項的工作表視窗,控制項在兩個視窗中的行為可能不相同。 例如,如果您執行程式碼來變更工作表上 TextBoxBackColor 屬性,變更可能只會出現在其中一個視窗。

無法在 Outlook 增益集中加入自訂屬性頁

如果您的 Outlook 增益集為 Outlook 的 [選項] 對話方塊或 Outlook 資料夾的 [屬性] 對話方塊建立自訂屬性頁,則必須對 COM 明確顯示自訂屬性頁 (根據預設,COM 看不到組件)。 否則,您的增益集將無法建立自訂屬性頁,且您可能會在對增益集偵錯時收到 COMException

對 COM 顯示自訂屬性頁的方式有兩種:

  • ComVisibleAttribute 加入在專案中實作自訂屬性頁的類別。 如需將屬性套用至類別的詳細資訊,請參閱套用屬性

  • 使用 Visual Studio 對 COM 顯示整個增益集組件。

    若要使用 Visual Studio 對 COM 顯示增益集組件

    1. 在 Visual Studio 中,以滑鼠右鍵按一下 [方案總管] 中的專案,然後按一下 [屬性]。

    2. 按一下 [應用程式] 索引標籤。

    3. 按一下 [組件資訊] 按鈕。

    4. 選取 [讓組件成為 COM-Visible] 核取方塊。

    5. 按一下 [確定]。

將資料繫結至控制項並快取資料

您可能會在使用資料繫結或快取資料的 Office 方案中遇到下列錯誤。

如果顯示強制回應對話方塊,ListObject 的資料繫結便會失敗

如果 Excel 在繫結至 ListObject 的資料集更新時顯示強制回應對話方塊,ListObject 的資料繫結 (Data Binding) 便會失敗。 當 ListObject 遺失資料繫結時,會引發 DataBindingFailure 事件。 若要再次將 ListObject 繫結至資料來源,請處理 DataBindingFailure 事件並呼叫 SetDataBinding 方法。

快取的 Visual Basic 資料集名稱並未在資料快取中正確顯示

使用 Visual Basic 建立標記為 Cached 和 WithEvents 的 DataSet 物件 (包括從 [資料來源] 視窗或 [工具箱] 拖曳的 DataSet 物件,且其 CacheInDocument 屬性設定為 True),在快取中顯示的名稱前面會加上底線。 例如,如果您建立 DataSet 並將其命名為 Customers,CachedDataItem 在快取中的名稱將會是 _Customers。 當您使用 ServerDocument 存取此快取項目時,必須指定 _Customers 而不是 Customers。

使用 ServerDocument 類別

您可能會在使用 Microsoft.VisualStudio.Tools.Applications.ServerDocument 類別的 Office 方案中遇到下列錯誤。

無法在只安裝 Visual Studio 2010 Tools for Office Runtime 的電腦上執行使用 ServerDocument 的舊版應用程式

如果您嘗試在只安裝 Visual Studio 2010 Tools for Office Runtime 的電腦上執行的應用程式會使用 Visual Studio Tools for Office System (Runtime 3.0 版) 中的 Microsoft.VisualStudio.Tools.Applications.ServerDocument 類別,則應用程式可能會非預期地失敗。 若要執行這個應用程式,請在電腦上安裝 Visual Studio Tools for Office System (Runtime 3.0 版)。 這兩個版本的執行階段可以同時安裝在同一台電腦上。

請參閱

工作

Office 方案的設計階段錯誤疑難排解

Office 方案安全性疑難排解

概念

Office 方案部署疑難排解

其他資源

Office 方案疑難排解

變更記錄

日期

記錄

原因

2010 年 9 月

新增有關檢視安裝和載入錯誤的資訊。

資訊加強。

2010 年 5 月

新增有關 FrameworkVersionMismatchException 的章節。

資訊加強。