上一次說(shuō)到VS2008中的插件開發(fā),最終結(jié)果插件是部署在VS2008中,現(xiàn)在我們將插件部署到SSMS2008(Microsoft Sql Server Management Studio 2008)中。可以參考一下 這里 。
打開上一次的項(xiàng)目MySSMSAddin,右“解決方案資源管理器”中右擊該項(xiàng)目,選擇“屬性”,進(jìn)入該項(xiàng)目的屬性設(shè)置界面。在“應(yīng)用程序”選項(xiàng)卡中,將“程序集名稱”改為“MySSMSAddin”,這不是必須的,但我習(xí)慣程序集名稱與項(xiàng)目名稱相同。
在“生成”選項(xiàng)卡中,選中“為COM互操作注冊(cè)”。這樣才可以向注冊(cè)表中注冊(cè)我們寫的DLL文件。另外一個(gè)方法是增加一個(gè)安裝項(xiàng)目,由安裝項(xiàng)目來(lái)注冊(cè)。
在“調(diào)試”選項(xiàng)卡中,將“啟動(dòng)外部程序”那項(xiàng)的內(nèi)容改為SSMS可執(zhí)行文件,該文件在SQL2008的安裝目錄中的100\Tools\Binn\VSShell\Common7\IDE中的Ssms.exe,要包含路徑,我的機(jī)器是“C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe”。將“命令行參數(shù)”中的內(nèi)容清空。將“工作目錄”設(shè)置為SSMS.EXE所在目錄,我的機(jī)器是“C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\”。
添加一些操作SSMS需要用的類庫(kù)(DLL文件),SQL安裝目錄(C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE)中的SqlWorkbench.Interfaces.dll和Microsoft.SqlServer.SqlTools.VSIntegration.dll。
在注冊(cè)表中增加如下圖內(nèi)容,SSMS所有的插件都需要在Addins中注冊(cè)(如果沒有Addins請(qǐng)自行添加),其中MySSMSAddin.Connect是插件的全名稱,前面表示命名空間,后面表示類名。LoadBehavior為雙字節(jié)值(DWORD)。下圖中的內(nèi)容也可以添加在HKEY_CURRENT_USER中,不過(guò)這樣的話插件就只能由當(dāng)前用戶使用,對(duì)其他用戶不可見。

此時(shí)如果打開SSMS2008,會(huì)發(fā)現(xiàn)報(bào)錯(cuò),因?yàn)槲覀兊腄LL并沒有進(jìn)行注冊(cè),要注冊(cè)很簡(jiǎn)單,編譯一下我們的項(xiàng)目(MySSMSAddin)就可以,但是編譯后再打開SSMS2008仍然會(huì)報(bào)錯(cuò),這是因?yàn)楂@取SSMS2008的APPLICATION(DTE)對(duì)象和VS2008中的不一樣。
打開Connect.cs,找到OnConnection方法的,將第一行的內(nèi)容
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application;
改成
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)ServiceCache.ExtensibilityModel;注意,需要引用命名空間using Microsoft.SqlServer.Management.UI.VSIntegration;
此時(shí),運(yùn)行程序,發(fā)現(xiàn)VS2008自動(dòng)運(yùn)行SSMS2008,并且沒有任何錯(cuò)誤,但是工具菜單中并沒有找到“Test Menu“這個(gè)菜單項(xiàng)。這是因?yàn)镾SMS2008加載插件的時(shí)候,其狀態(tài)并不是ext_ConnectMode.ext_cm_UISetup而是ext_ConnectMode.ext_cm_Startup(關(guān)于ext_ConnectMode枚舉的說(shuō)明請(qǐng)參考 這里 ),將OnConnection方法中的代碼
if(connectMode == ext_ConnectMode.ext_cm_UISetup)改成
if (connectMode == ext_ConnectMode.ext_cm_Startup)現(xiàn)在運(yùn)行程序,會(huì)發(fā)現(xiàn)SSMS2008的工具菜單中出現(xiàn)了我們定義的菜單,并且點(diǎn)擊也會(huì)彈出“Hello World”。效果如下圖:
關(guān)于調(diào)試:要調(diào)試SSMS的插件,就和正常的代碼一樣,在需要的地方增加斷點(diǎn)即可。
下一次將會(huì)詳細(xì)介紹SSMS2008中增加菜單、訪問(wèn)各種對(duì)象的方法。
這次的相關(guān)DEMO項(xiàng)目在
我的資源中
。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
