關(guān)于VS2003插件的正確理解與使用
最近處理了好幾個(gè)VS2003插件的問(wèn)題,總結(jié)出一些經(jīng)驗(yàn),在此與大家分享一下。希望大家能夠多多提出建議與意見(jiàn),VS2003插件真的很讓人頭疼啊,下面就拿出來(lái)給諸位小看一下。
首先介紹一些注意點(diǎn):
1. 一定要把宏安全級(jí)別設(shè)置為Medium以下,默認(rèn)是High,肯定不允許運(yùn)行任何Addin,這點(diǎn)一定要注意,否則再怎么改程序也是徒勞
2. 在開(kāi)發(fā)Addin的機(jī)器上,建議僅安裝一個(gè)版本的Office,否則可能因?yàn)橐玫腛ffice Library Reference混淆,導(dǎo)致在其他機(jī)器上無(wú)法正常加載
3. 如果你開(kāi)發(fā)的是Office XP的Add-in,必須安裝Office XP PIA (primary interop assemblies),這是對(duì)Office COM對(duì)象的封裝庫(kù)。
你可以到http://www.microsoft.com/downloads/details.aspx?familyid=C41BD61E-3060-4F71-A6B4-01FEBA508E52&displaylang=en下載。
4. 在創(chuàng)建Addin項(xiàng)目時(shí)一定要正確選擇Office目標(biāo)程序,如Word, Excel, Visio, PowerPoint等,如下圖所示:

5. 在創(chuàng)建Addin向?qū)У牡箶?shù)第二步,通常情況下一定要將兩個(gè)選項(xiàng)都選中,特別是第二個(gè)選項(xiàng),否則可能由于不支持所有用戶都運(yùn)行,而出現(xiàn)未自動(dòng)加載的情況

接下來(lái)是常見(jiàn)問(wèn)題解答
問(wèn)題1 在Office插件加載時(shí),即使加載失敗也不會(huì)有任何提示,如果出現(xiàn)Assembly加載錯(cuò)誤,我該如何跟蹤這些錯(cuò)誤
我 們可以在.net自帶的工具中找到一個(gè)叫做Assembly Binding Log Viewer的工具,通過(guò)它我們可以幾乎所有的assembly加載異常。要注意的是,每個(gè)版本的.net都自帶了一個(gè)相應(yīng)版本的Assembly Binding Log Viewer,所以運(yùn)行的時(shí)候要看一下調(diào)用的是哪個(gè)版本的。比如我們現(xiàn)在要調(diào)試基于.net 1.1開(kāi)發(fā)的Office插件,可以通過(guò)以下步驟運(yùn)行:
1. 點(diǎn)擊 開(kāi)始 > Microsoft Visual Studio .NET 2003 > Visual Studio .NET 工具 > Visual Studio .NET 2003 命令提示,
2. 在進(jìn)入Visual Studio 2003命令行模式下,輸入fuslogvw.exe
這時(shí)我們就可以看到該工具的界面了,如圖:

有關(guān)該工具的詳細(xì)信息可以看http://msdn2.microsoft.com/en-us/library/e74a18c4(vs.80).aspx
同樣的,如果我們要啟動(dòng).net 2.0的Assembly Binding Log Viewer就在VS2005的命令行下輸入fuslogvw。
問(wèn)題2 Visual Studio 2005開(kāi)發(fā)的Office插件無(wú)法在Office中運(yùn)行
這個(gè)問(wèn)題可能是由于沒(méi)有安裝KB908002中提到的prerequisite造成的,可以去下面的地址下載該文檔中提到的補(bǔ)?。篽ttp://support.microsoft.com/kb/908002
安裝完成后,我們可以在Add-in的安裝項(xiàng)目的prerequisites中找到一個(gè)新的組件。

如上圖所示,其中多了一個(gè)Shared Add-in Support Update for Microsoft .NET Framework 2.0 (KB908002)#t#
問(wèn)題3 如何制作兼容多個(gè)版本Office的Office Addin
通 常情況下,我們編寫的Add-in都是直接用向?qū)傻模沂褂玫氖窃缙诮壎夹g(shù)(early binding)。但在許多需求中,我們需要制作一個(gè)能夠兼容多個(gè)Office版本的Add-in,這時(shí)我們就不能使用早期綁定了,而應(yīng)該使用后期綁定 (late binding)。關(guān)于早期綁定和后期綁定的詳細(xì)信息,請(qǐng)見(jiàn)http://word.mvps.org/FAQs/InterDev/EarlyvsLateBinding.htm
問(wèn)題4 通常Addin設(shè)置保存在注冊(cè)表的什么位置
以O(shè)ffice 2003 Word Add-in為例,通常會(huì)保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\Addins中。
假設(shè)我們有一個(gè)名字為MyAddin1的Addin,那么它就會(huì)保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\Addins\MyAddin1.Connect中。
對(duì)于Excel Add-in來(lái)說(shuō),也是類似的,通常保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Excel\Addins中,依此類推。
在 每個(gè)Add-in的設(shè)置屬性中有一個(gè)重要的標(biāo)志LoadBehavior,這個(gè)屬性是保存在XXXX.Connect中的,類型為DWORD,這個(gè)值直接 決定了Addin的啟動(dòng)模式,默認(rèn)值為3表示Office應(yīng)用程序一啟動(dòng)就運(yùn)行,這個(gè)設(shè)置與我們?cè)贏ddin向?qū)е羞x擇的"I would like my Add-in to load when the host application loads"是對(duì)應(yīng)的。
問(wèn)題5 當(dāng)確定你的Add-in應(yīng)該可以正確加載,但在啟動(dòng)時(shí)沒(méi)有加載,這是怎么回事
如果一個(gè)Add-in因?yàn)槟承┰蛟趩?dòng)時(shí)加載失敗, Office應(yīng)用程序會(huì)自動(dòng)把LoadBehavior改成8,這表示僅在需要加載時(shí)才加載該Add-in,而不是在Office啟動(dòng)時(shí)。所以這時(shí)可以到 與該Add-in對(duì)應(yīng)的注冊(cè)表項(xiàng)中檢查一下LoadBehavior值是否正確,如果為8,一定把它改成3。
問(wèn)題6 你不確定Add-in的哪一部分出了問(wèn)題,該如何調(diào)試
首先必須確定assembly的引用沒(méi)有出現(xiàn)問(wèn)題,關(guān)于如何檢測(cè)引用出錯(cuò)的情況已經(jīng)在問(wèn)題1中說(shuō)明。
看來(lái)VS2003插件真的很苦悶??!


















