2010-05-29 14 views
3

我試圖爲SSMS 2008和/或2008 R2創建加載項,但我馬上遇到了問題。嘗試創建ssms加載項的問題

我可以讓我的加載項工作,並在SSMS啓動它只需顯示一個消息框。使用SSMS 2008年時

Commands2 commands = (Commands2)ServiceCache.ExtensibilityModel.Commands; 

我得到這個問題:

然而,下載各種代碼樣本後,試圖引用Microsoft.SqlServer.Management.UI.VSIntegration.ServiceCache當我得到一個空引用異常或SSMS 2008 R2。我正在使用Visual Studio 2010.

這有點令人沮喪,因爲我很想了解更多關於SSMS插件的知識,但似乎無法通過少數幾個樣本。

任何意見/技巧讚賞。

感謝

+0

我聽說SSMS不可擴展。你在哪裏找到代碼示例? – 2010-05-29 15:03:18

+0

@John Saunders:不,不,SSMS絕對* IS *可擴展!查看http://www.ssmstoolspack.com/例如 – 2010-05-29 16:59:52

回答

5

卡爾,我不知道你在這裏具體問題,但回答另一個問題時,我碰到了一堆的文章和鏈接來編寫SSMS插件 - 也許他們中的一個將是有益的你:

的一些信息可以在這裏找到:

+0

感謝您的回覆。我已經瀏覽了你提到的前三個站點Marc - 我還沒有看到SSMS Scripter站點,所以我會檢查一下。 我使用的具體代碼示例來自http://extendedeventmanager.codeplex.com/releases/view/35325上的Extended SSMS Addin。 當我調試示例時,ServiceCache始終爲空,並導致null異常,所以我無法通過該點。 – Karl 2010-05-29 23:30:05

3

ServiceCache是​​靠不住的 - 因版本支持越來越少,並可能會在某個時候離開。

如果您編寫SSMS加載項,則可以通過訪問VS ApplicationModel訪問內部函數。 類似的東西:

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) 
     { 
      _addInInstance = (AddIn)addInInst; 
      _applicationObject = _addInInstance.DTE as DTE2; 

_applicationObject具有命令和其他有趣的東西。

請注意,這在OnConnection的應用參數在傳遞一個不正確的對象這就是爲什麼你必須使用此行來得到正確的對象:_applicationObject = _addInInstance.DTE爲DTE2;

0

我有同樣的問題。我認爲這是喜歡框架

隨着框架3.5

ServiceCache.ExtensibilityModel不爲空

隨着框架4.0

「ServiceCache。ExtensibilityModel」是 空

0

好,感謝這樣,但如果我有在Framework 3.5的項目,VS2010不會停止我的破發點。 但如果我改變框架4,VS2010停止。在斷點但CreateToolWindow2拋出一個異常,因爲是不一樣的框架

我簡化代碼爲最低:!

/// <summary>Implements the OnConnection method of the IDTExtensibility2 interface. Receives notification that the Add-in is being loaded.</summary> 
    /// <param term='application'>Root object of the host application.</param> 
    /// <param term='connectMode'>Describes how the Add-in is being loaded.</param> 
    /// <param term='addInInst'>Object representing this Add-in.</param> 
    /// <seealso class='IDTExtensibility2' /> 
    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) 
    {    
     _addInInstance = (AddIn)addInInst; 
     _applicationObject = (DTE2)_addInInstance.DTE; 

     if (connectMode == ext_ConnectMode.ext_cm_Startup)//ext_ConnectMode.ext_cm_UISetup) 
     { 
     }   
    } 

    /// <summary>Implements the OnStartupComplete method of the IDTExtensibility2 interface. Receives notification that the host application has completed loading.</summary> 
    /// <param term='custom'>Array of parameters that are host application specific.</param> 
    /// <seealso class='IDTExtensibility2' /> 
    public void OnStartupComplete(ref Array custom) 
    {    
     Windows2 win2 = this._applicationObject.Windows as Windows2; 

     if (win2 != null) 
     { 
      Assembly asm = Assembly.GetExecutingAssembly(); 
      AddIn addinobj; 

      addinobj = this._applicationObject.AddIns.Item(1); 

      object controlObject = null; 

      Guid id = new Guid("4c410c93-d66b-495a-9de2-99d5bde4a3b9"); // this guid doesn't seem to matter? 
      //Window     
      Window windowTool = win2.CreateToolWindow2(addinobj, 
                 asm.Location, 
                 "MyAddinASupp.UserControl1", "Zone de test", 
                 "{" + id.ToString() + "}", 
                 ref controlObject); 

      windowTool.Visible = true; 
     } 
    } 
1

我一直是這樣掙扎了一會兒

我有一個加載項在SQL 2008中工作 - 用VS2008編寫。

我升級項目,VS2010並開始獲得SQL 2008 R2的附加工作的工作 - 我不能得到這個工作的愛,也沒有錢。

我嘗試了很多不同的東西; *刪除並重新添加所有參考。 *改變目標框架。 不是香腸。

毫無效果.... 直到我回到VS2008 - 我所做的更改。 (見喬納森Kehayias博客:http://sqlblog.com/blogs/jonathan_kehayias/archive/2009/08/22/sql-2008-r2-breaks-ssms-addins.aspx

華友世紀的新版本!

1

好吧,我找到解決辦法,問題是CLR2.0和CLR 4.0

來源之間:http://blogs.msdn.com/b/mshneer/archive/2010/03/19/com-shim-wizards-for-vs-2010.aspx

調試插件針對CLR 2.0 Visual Studio 2010中

我調試加載項的一些問題 如果這些加載在CLR 2.0中。我 會按F5時,Excel將啓動 和我的外接將運行,但 斷點均未擊中。所以我 想分享這是怎麼回事,並 如何設置你的環境,這樣 的方式,F5的經驗並不 徹底打破。

有沒有什麼神奇的方式,我通常 去調試共享加載項 - 無論是微調還是未加工。我在Connect.cs文件中設置的OnConnection方法 一個 斷點,開放項目的 屬性,進入調試部分, 選擇「啓動外部程序」選項 和完整路徑設置爲我的 Office應用程序(例如「 C:\ Program Files \ Microsoft Office \ Office12 \ EXCEL.EXE「)。接下來,我 就在 Solution Explorer中單擊項目節點並選擇「設置爲 啓動項目」。當我按F5時,我的 斷點被擊中。

在Visual Studio 2010中,如果我的加載項在 CLR 2.0中加載,則不會觸發斷點 。發生了什麼是 調試器無法附加到CLR 4.0 和CLR 2。0 - 實際上它需要知道 之前是否應該使用 使用CLR 2.0調試引擎或者使用 CLR 4.0調試引擎。當你按下F5調試器時,你試圖猜測哪個 CLR將在這個過程中啓動。 啓發式是根據閱讀需要時 運行時版本u8sually指定 如果config文件中沒有找到 比調試器火了CLR 4.0 調試引擎 EXE的config文件。衆所周知,我們都知道 Office應用程序沒有綁定到 CLR的任何特定版本,所以 啓發式可悲地失敗。

實際上有兩種處理 的方法 - 一個是將 .exe.config文件與 一起放入。調試時 Excel 2007我將創建 Excel.exe.config並將其保留在 「C:\ Program Files \ Microsoft Office \ Office12」文件夾中。

但我的首選處理方法 這是不同的。在解決方案 Explorer中,我將右鍵單擊我的 解決方案節點並選擇「添加」 - > 「Existing Project」並打開 「C:\ Program Files \ Microsoft Office \ Office12 \ EXCEL.EXE」。接下來,我 將右鍵單擊這個新添加的 項目並選擇「設爲啓動 項目」。接下來,我將打開該項目的 屬性,並將 將「調試器類型」屬性設置爲 「託管(v2.0,v1.1,v1.0)」。現在,我將的F5和我在 中設置的斷點OnConnection方法命中。