逐步解說: 使用自動化來呼叫 Visual Studio 的 SDK
這個逐步解說將說明如何建立使用 Visual Studio 服務是 Visual Studio 增益集。 您所建立的增益集取得服務提供者,並用它來取得服務。 若要取得任何 proffered 的 Visual Studio 服務,您可以使用這項技術。 如需有關服務和服務提供者的詳細資訊,請參閱服務。 下列程序會示範如何建立增益集,然後再取得服務,從 [增益集。
建立增益集
在本節中,您會建立 Visual Studio 的嵌入式管理單元使用 Visual Studio 增益功能] 專案範本。
若要建立增益集
開啟 Visual Studio。 在檔案 功能表上指向 新增 ,然後按一下 新的專案。
[新增專案] 對話方塊隨即出現。
在左窗格中新的專案 對話方塊方塊中,展開 其他專案類型 節點,然後按一下 [ 擴充性節點。
建立新的Visual Studio增益集專案名為增益集。
Visual Studio會執行增益集精靈 」。
在選取程式語言頁面上,選取 會使用 [增益集在建立視覺化的 C# 或建立的增益集使用 Visual Basic。
在選取主應用程式 頁面上,選取 Visual Studio 2010 Microsoft ,並清除 Microsoft Visual Studio 2010年巨集。
上輸入名稱和描述 頁面上,輸入 MyAddin 在名稱 方塊和 MyAddin 逐步解說 在 描述方塊。
上增益集選項中選擇 [ 頁面上,選取您是否要建立命令列 UI 的增益集?. 清除其他核取方塊。
接受所有其他預設值。
建置解決方案,請確認在編譯時未發生任何錯誤。
取得服務嵌入式管理單元
下列步驟會引導您取得增益集的服務。
若要取得服務
開啟檔案 Connect.cs 或 Connect.vb,然後加入這幾行加入using (C#) 或Imports (Visual Basic) 陳述式:
Imports System.Runtime.InteropServices Imports Microsoft.VisualStudio.OLE.Interop Imports Microsoft.VisualStudio.Shell.Interop Imports IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider
using System.Runtime.InteropServices; using Microsoft.VisualStudio.OLE.Interop; using Microsoft.VisualStudio.Shell.Interop; using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
以滑鼠右鍵按一下專案節點,在方案總管] 中 ,來新增這些效果。NET 的參考:
Microsoft.VisualStudio.OLE.Interop Microsoft.VisualStudio.Shell.Interop
加入下列幾行程式碼必須以if(commandName == "Addin.Connect.Addin")或If commandName = "Addin.Connect.Addin" Then的子句Exec方法:
If commandName = "Addin.Connect.Addin" Then Dim sp As IOleServiceProvider = DirectCast(_applicationObject, IOleServiceProvider) Dim SID As Guid = GetType(SVsUIShell).GUID Dim IID As Guid = GetType(IVsUIShell).GUID Dim output As IntPtr sp.QueryService(SID, IID, output) Dim uiShell As IVsUIShell = DirectCast(Marshal.GetObjectForIUnknown(output), IVsUIShell) Dim clsid As Guid = Guid.Empty Dim result As Integer uiShell.ShowMessageBox(0, clsid, "MyAddin", String.Format(System.Globalization.CultureInfo.CurrentCulture, "Inside " & Me.ToString()), String.Empty, 0, _ OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, result) handled = True Return End If
if (commandName == "Addin.Connect.Addin") { IOleServiceProvider sp = (IOleServiceProvider) _applicationObject; Guid SID = typeof(SVsUIShell).GUID; Guid IID = typeof(IVsUIShell).GUID; IntPtr output; sp.QueryService(ref SID, ref IID, out output); IVsUIShell uiShell = (IVsUIShell)Marshal.GetObjectForIUnknown(output); Guid clsid = Guid.Empty; int result; uiShell.ShowMessageBox( 0, ref clsid, "MyAddin", string.Format( CultureInfo.CurrentCulture, "Inside " + this.ToString()), string.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, out result); handled = true; return; }
這段程式碼轉換目前的應用程式物件 (型別DTE2) 到IOleServiceProvider,然後呼叫QueryService以取得SVsUIShell服務。 這項服務提供IVsUIShell介面。 ShowMessageBox增益集執行時,方法會顯示訊息方塊。
建置和偵錯模式中啟動增益集專案,按下 f5 鍵。
這會啟動另一個執行個體的Visual Studio。
在新Visual Studio執行個體,在工具] 功能表中,按一下 增益集。 訊息方塊會顯示這個:
MyAddin Inside Addin.Connect