基於Visual Studio 2003/2005的Office插件開發FAQ

最近處理了好幾個Office Addin的問題,總結出一些經驗,在此與大家分享一下。

首先介紹一些注意點

1. 一定要把宏安全級別設置爲Medium以下,默認是High,肯定不允許運行任何Addin,這點一定要注意,否則再怎麼改程序也是徒勞

2. 在開發Addin的機器上,建議僅安裝一個版本的Office,否則可能因爲引用的Office Library Reference混淆,導致在其他機器上無法正常加載

3. 如果你開發的是Office XP的Add-in,必須安裝Office XP PIA (primary interop assemblies),這是對Office COM對象的封裝庫。

你可以到http://www.microsoft.com/downloads/details.aspx?familyid=C41BD61E-3060-4F71-A6B4-01FEBA508E52&displaylang=en下載。

3. 在創建Addin項目時一定要正確選擇Office目標程序,如Word, Excel, Visio, PowerPoint等,如下圖所示:


4. 在創建Addin嚮導的倒數第二步,通常情況下一定要將兩個選項都選中,特別是第二個選項,否則可能由於不支持所有用戶都運行,而出現未自動加載的情況。


接下來是常見問題解答

問題1 在Office插件加載時,即使加載失敗也不會有任何提示,如果出現Assembly加載錯誤,我該如何跟蹤這些錯誤
我們可以在.net自帶的工具中找到一個叫做Assembly Binding Log Viewer的工具,通過它我們可以幾乎所有的assembly加載異常。要注意的是,每個版本的.net都自帶了一個相應版本的Assembly Binding Log Viewer,所以運行的時候要看一下調用的是哪個版本的。比如我們現在要調試基於.net 1.1開發的Office插件,可以通過以下步驟運行:
1. 點擊 開始 > Microsoft Visual Studio .NET 2003 > Visual Studio .NET 工具 > Visual Studio .NET 2003 命令提示,
2. 在進入Visual Studio 2003命令行模式下,輸入fuslogvw.exe

這時我們就可以看到該工具的界面了,如圖:


有關該工具的詳細信息可以看http://msdn2.microsoft.com/en-us/library/e74a18c4(vs.80).aspx

同樣的,如果我們要啓動.net 2.0的Assembly Binding Log Viewer就在VS2005的命令行下輸入fuslogvw。

問題2 Visual Studio 2005開發的Office插件無法在Office中運行
這個問題可能是由於沒有安裝KB908002中提到的prerequisite造成的,可以去下面的地址下載該文檔中提到的補丁:http://support.microsoft.com/kb/908002

安裝完成後,我們可以在Add-in的安裝項目的prerequisites中找到一個新的組件。

如上圖所示,其中多了一個Shared Add-in Support Update for Microsoft .NET Framework 2.0 (KB908002)

問題3 如何製作兼容多個版本Office的Office Addin
通常情況下,我們編寫的Add-in都是直接用嚮導生成的,且使用的是早期綁定技術(early binding)。但在許多需求中,我們需要製作一個能夠兼容多個Office版本的Add-in,這時我們就不能使用早期綁定了,而應該使用後期綁定(late binding)。關於早期綁定和後期綁定的詳細信息,請見http://word.mvps.org/FAQs/InterDev/EarlyvsLateBinding.htm

問題4 通常Addin設置保存在註冊表的什麼位置
以Office 2003 Word Add-in爲例,通常會保存在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Office/Word/Addins中。
假設我們有一個名字爲MyAddin1的Addin,那麼它就會保存在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Office/Word/Addins/MyAddin1.Connect中。

對於Excel Add-in來說,也是類似的,通常保存在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Office/Excel/Addins中,依此類推。

在每個Add-in的設置屬性中有一個重要的標誌LoadBehavior,這個屬性是保存在XXXX.Connect中的,類型爲DWORD,這個值直接決定了Addin的啓動模式,默認值爲3表示Office應用程序一啓動就運行,這個設置與我們在Addin嚮導中選擇的"I would like my Add-in to load when the host application loads"是對應的。

問題5 當確定你的Add-in應該可以正確加載,但在啓動時沒有加載,這是怎麼回事
如果一個Add-in因爲某些原因在啓動時加載失敗,Office應用程序會自動把LoadBehavior改成8,這表示僅在需要加載時才加載該Add-in,而不是在Office啓動時。所以這時可以到與該Add-in對應的註冊表項中檢查一下LoadBehavior值是否正確,如果爲8,一定把它改成3。

問題6 你不確定Add-in的哪一部分出了問題,該如何調試
首先必須確定assembly的引用沒有出現問題,關於如何檢測引用出錯的情況已經在問題1中說明。

接下來我們就要檢查OnConnection是否被調用,我們可以在OnConnection中加入一句調試語句,如下

public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
MessageBox.Show(
"OnConnection Loaded");
applicationObject 
= application;
addInInstance 
= addInInst;
}

如果OnConnection加載成功,那麼肯定會彈出一個對話框,否則就要考慮檢查一下是不是設置的問題,如是不是LoadBehavior的值不正確。(見問題5)

接下來的調試也是類似的,通過加入MessageBox.Show或其他調試語句來檢查代碼是否已運行到某個位置。

 

http://www.cnblogs.com/tonyqus/archive/2007/02/05/637670.html

發佈了1 篇原創文章 · 獲贊 5 · 訪問量 257萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章