關(guān)于VS2003插件的正確理解與使用
最近處理了好幾個VS2003插件的問題,總結(jié)出一些經(jīng)驗,在此與大家分享一下。希望大家能夠多多提出建議與意見,VS2003插件真的很讓人頭疼啊,下面就拿出來給諸位小看一下。
首先介紹一些注意點:
1. 一定要把宏安全級別設(shè)置為Medium以下,默認是High,肯定不允許運行任何Addin,這點一定要注意,否則再怎么改程序也是徒勞
2. 在開發(fā)Addin的機器上,建議僅安裝一個版本的Office,否則可能因為引用的Office Library Reference混淆,導(dǎo)致在其他機器上無法正常加載
3. 如果你開發(fā)的是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下載。
4. 在創(chuàng)建Addin項目時一定要正確選擇Office目標程序,如Word, Excel, Visio, PowerPoint等,如下圖所示:
5. 在創(chuàng)建Addin向?qū)У牡箶?shù)第二步,通常情況下一定要將兩個選項都選中,特別是第二個選項,否則可能由于不支持所有用戶都運行,而出現(xiàn)未自動加載的情況
接下來是常見問題解答
問題1 在Office插件加載時,即使加載失敗也不會有任何提示,如果出現(xiàn)Assembly加載錯誤,我該如何跟蹤這些錯誤
我 們可以在.net自帶的工具中找到一個叫做Assembly Binding Log Viewer的工具,通過它我們可以幾乎所有的assembly加載異常。要注意的是,每個版本的.net都自帶了一個相應(yīng)版本的Assembly Binding Log Viewer,所以運行的時候要看一下調(diào)用的是哪個版本的。比如我們現(xiàn)在要調(diào)試基于.net 1.1開發(fā)的Office插件,可以通過以下步驟運行:
1. 點擊 開始 > Microsoft Visual Studio .NET 2003 > Visual Studio .NET 工具 > Visual Studio .NET 2003 命令提示,
2. 在進入Visual Studio 2003命令行模式下,輸入fuslogvw.exe
這時我們就可以看到該工具的界面了,如圖:
有關(guān)該工具的詳細信息可以看http://msdn2.microsoft.com/en-us/library/e74a18c4(vs.80).aspx
同樣的,如果我們要啟動.net 2.0的Assembly Binding Log Viewer就在VS2005的命令行下輸入fuslogvw。
問題2 Visual Studio 2005開發(fā)的Office插件無法在Office中運行
這個問題可能是由于沒有安裝KB908002中提到的prerequisite造成的,可以去下面的地址下載該文檔中提到的補?。篽ttp://support.microsoft.com/kb/908002
安裝完成后,我們可以在Add-in的安裝項目的prerequisites中找到一個新的組件。
如上圖所示,其中多了一個Shared Add-in Support Update for Microsoft .NET Framework 2.0 (KB908002)#t#
問題3 如何制作兼容多個版本Office的Office Addin
通 常情況下,我們編寫的Add-in都是直接用向?qū)傻?,且使用的是早期綁定技術(shù)(early binding)。但在許多需求中,我們需要制作一個能夠兼容多個Office版本的Add-in,這時我們就不能使用早期綁定了,而應(yīng)該使用后期綁定 (late binding)。關(guān)于早期綁定和后期綁定的詳細信息,請見http://word.mvps.org/FAQs/InterDev/EarlyvsLateBinding.htm
問題4 通常Addin設(shè)置保存在注冊表的什么位置
以O(shè)ffice 2003 Word Add-in為例,通常會保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\Addins中。
假設(shè)我們有一個名字為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的設(shè)置屬性中有一個重要的標志LoadBehavior,這個屬性是保存在XXXX.Connect中的,類型為DWORD,這個值直接 決定了Addin的啟動模式,默認值為3表示Office應(yīng)用程序一啟動就運行,這個設(shè)置與我們在Addin向?qū)е羞x擇的"I would like my Add-in to load when the host application loads"是對應(yīng)的。
問題5 當(dāng)確定你的Add-in應(yīng)該可以正確加載,但在啟動時沒有加載,這是怎么回事
如果一個Add-in因為某些原因在啟動時加載失敗, Office應(yīng)用程序會自動把LoadBehavior改成8,這表示僅在需要加載時才加載該Add-in,而不是在Office啟動時。所以這時可以到 與該Add-in對應(yīng)的注冊表項中檢查一下LoadBehavior值是否正確,如果為8,一定把它改成3。
問題6 你不確定Add-in的哪一部分出了問題,該如何調(diào)試
首先必須確定assembly的引用沒有出現(xiàn)問題,關(guān)于如何檢測引用出錯的情況已經(jīng)在問題1中說明。
看來VS2003插件真的很苦悶啊!