共用方式為


逐步解說: 建立 (第 1 部,共 4) VSPackage

您可以藉由建立 VSPackage,Visual Studio 來新增功能。 由於 VSPackage 是一種軟體模組,您可以發佈給其他人,使它們可以延伸 Visual Studio 在他們自己的電腦上。

藉由使用 Visual Studio 的封裝範本,您可以使已經有原始程式檔和組態檔來建立 VSPackage 所需的專案。 當您建立專案時,該專案將包含定義的類別檔案該名稱。 這個類別是衍生自管理套件架構 (MPF) 類別,名為Package,包括決定在 Visual Studio,VSPackage 應該如何運作的屬性。 封裝類別也包含初始化程式碼和其他的程式碼,例如功能表命令處理常式。 這個類別是 VSPackage 的基礎。

本逐步解說會教導如何建立 VSPackage,並進行自訂,,如下所示:

  • 使用封裝範本,以建立 VSPackage。

  • 實作功能表命令處理常式。

  • 加入鍵盤快速鍵。

  • 將自訂資訊加入至 Visual Studio 的啟動顯示畫面和有關對話方塊。

這個逐步解說會教導如何擴充 Visual Studio 的整合式的開發環境 (IDE) 的一系列的一部份。 如需詳細資訊,請參閱 使用 VSPackages 自訂 Visual Studio 的逐步解說

必要條件

若要完成這個逐步解說中,您必須安裝Visual Studio 2010 SDK。

注意事項注意事項

如需有關 Visual Studio 的 SDK 的詳細資訊,請參閱擴充 Visual Studio 的概觀。若要了解如何下載 Visual Studio 的 SDK,請參閱Visual Studio 擴充性開發人員中心可以在 MSDN 網站上。

Visual Studio 的封裝範本的範本位置

Visual Studio 的封裝範本,請參閱在這些位置新的專案對話方塊:

  1. 在 [Visual Basic 擴充性。 專案的預設語言是 Visual Basic。

  2. 在 [C# 擴充性。 專案的預設語言是 C#。

  3. 在 [其他專案的型別擴充性。 專案的預設語言是 c + +。

使用封裝範本建立 VSPackage

本章節示範如何建立在 Visual Studio 的 VSPackage 的解決方案。

若要建立基本的 VSPackage 方案

  1. 建立 VSPackage,使用 Visual Studio 的套件] 專案範本。

  2. 在 [歡迎使用] 頁面上,按一下

  3. 選取程式語言 頁面上,選取 視覺 C#Visual Basic,請選取 產生新的金鑰檔簽署組件,然後按一下 [ 下一步

  4. VSPackage 的基本資訊 VSPackage 名稱] 方塊中,型別] 頁面, FirstPackage,並接受其餘的預設值。 若要建立封裝的命名空間,將被結合公司名稱及專案名稱。

    基本 VSPackage 資訊

    按一下 [下一步]。

  5. 選取 VSPackage 選項 頁面上,選取 功能表命令,然後按一下 [ 下一步

  6. 命令選項 一頁,在 指令名稱 方塊中,輸入 的第一道命令。 (這段文字會出現在 [Visual Studio] 功能表)。 在命令 ID 方塊中,輸入 cmdidFirstCommand。 (這個識別項將用於程式碼中識別命令。)

    命令選項對話方塊

    按一下 [下一步]。

  7. 選取測試選項 頁面上,按一下 完成

    這個樣板會建立具有基本功能的 Visual Studio 專案。 您也可以嘗試藉由按下 f5 鍵,它會在建置專案,然後再將它開啟在另一個實例的 Visual Studio 在偵錯模式下 (也稱為 Visual Studio 的實驗建置)。

    注意事項注意事項

    當您第一次建置專案時,Visual Studio 可能會停止回應,而您可能會收到一則訊息,Visual Studio 是忙線中。只要忽略這個訊息,並等到 Visual Studio 會開啟,並在載入封裝。

  8. 在實驗性質的組建中,在工具 功能表中的指令,名為 的第一道命令應該會顯示。 請注意第一個命令鍵入名稱命令選項的範本的頁面。

  9. 按一下 [ 的第一道命令。 應該會出現類似下列的訊息。

    第一個命令訊息方塊

檢查功能表命令處理常式

當您按一下時顯示訊息的第一道命令工具功能表在功能表命令的處理常式的程式碼的來源。 這個處理常式是在 FirstPackage.cs 或 FirstPackage.vb 檔案中。

若要檢查這個功能表項目處理常式

  1. 方案總管] 中,開啟 FirstPackage.cs 或 FirstPackage.vb。

  2. 找出 FirstPackage 類別。 FirstPackage 類別定義,如下所示。

    Public NotInheritable Class FirstPackage
        Inherits Package
    
    public sealed class FirstPackage : Package
    

    請注意這個類別衍生自 MPF 套件類別。

  3. 功能表處理常式,MenuItemCallback 方法由存取關聯式資料庫中找到的程式碼。 功能表處理常式函式是典型的 Windows Form 的事件處理常式方法。

    Private Sub MenuItemCallback(ByVal sender As Object, ByVal e As EventArgs)
            ' Show a Message Box to prove we were here
            Dim uiShell As IVsUIShell = TryCast(GetService(GetType(SVsUIShell)), IVsUIShell)
            Dim clsid As Guid = Guid.Empty
            Dim result As Integer
            Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(0, clsid, "FirstPackage", String.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", Me.GetType().Name), String.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, result))
        End Sub
    
    private void MenuItemCallback(object sender, EventArgs e)
    {
        IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell));
        Guid clsid = Guid.Empty;
        int result;
    
        Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(
            uiShell.ShowMessageBox(
                0, ref clsid,
                "FirstPackage",
                string.Format(CultureInfo.CurrentCulture, 
                    "Inside {0}.MenuItemCallback()", this.ToString()),
                string.Empty, 0,
                OLEMSGBUTTON.OLEMSGBUTTON_OK,
                OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
                OLEMSGICON.OLEMSGICON_INFO,
                0, out result));
    }
    

加入鍵盤快速鍵

預設情況下,由封裝範本建立的功能表指令沒有快速鍵。 您可以加入至第一個命令。

若要新增的預設鍵盤快速鍵

  1. 方案總管] 中,開啟 First.vsct。

    Visual Studio 在 XML 編輯器中開啟檔案。

  2. 尋找命令的項目,也就指示的結尾</Commands>標記。

  3. 新增下列各行之間</Commands>標記和<Symbols>標記。

    <KeyBindings>
      <KeyBinding guid="guidFirstCmdSet" id="cmdidFirstCommand"    editor="guidVSStd97" key1="M" mod1="(control shift)"/>
    </KeyBindings>
    

    這個鍵組的項目有多個屬性。 guid和id屬性會判斷哪一個命令將會收到鍵盤快速鍵。 Guid 是 VSPackage 的 GUID 及識別碼是您在執行範本時所輸入的命令識別項。 這兩個符號中所定義的符號] 區段中,,如下所示。

    <Symbols>
      <GuidSymbol name="guidFirstCmdSet"     value="{600efde8-1f5e-4df5-bc22-06074a411975}">
        <IDSymbol name="cmdidFirstCommand" value="0x0100" />
      </GuidSymbol>
    

    值為editor屬性是代表鍵盤快速鍵將會提供內容的 GUID。 Visual Studio,在的鍵盤快速鍵的命令繫結可以只限於特定的 windows 或做為全域 (也就是到處都是在 Visual Studio)。 比方說,在文字編輯器中,CTRL + I 可能會執行累加搜尋] 指令,但在方案總管] 中,CTRL + I 有任何的快速鍵繫結。 因此,CTRL + I 是只適用於文字編輯器。 在這個逐步解說中,被設計為全域的鍵盤快速鍵。 因此,編輯屬性的值是guidVSStd97,這是讓鍵盤快速鍵的通用值。

    key1和mod1屬性設定的金鑰和啟動的鍵盤快速鍵,必須按住的修飾詞。 Key1 值,鍵盤上的所有機碼都以符號形式,比方說,"M"字母 m 和函式的"VK_F5"鍵 F5。 Mod1 的值可以是"Alt"、"控制項"或"Shift 」,使用任意混用空格分隔。

    在這個逐步解說中,key1 值是M和 mod1 的值是 (Control Shift)。 因此,鍵盤快速鍵是 CTRL + SHIFT + M。

  4. 在 [偵錯] 功能表上,按一下 [啟動但不偵錯]。

    在實驗建置的 Visual Studio,在工具 ] 功能表中,應該要旁顯示 CTRL + SHIFT + M 的第一道命令

    第一個命令 - 含捷徑

  5. 按 CTRL + SHIFT + M。 您應該會看到相同的訊息出現,當您按一下 [ 的第一道命令工具功能表。

    如需有關.vsct 檔案的詳細資訊,請參閱VSCT XML 結構描述參考

新增自訂的資訊關於對話方塊

您可以加入資訊關於您的套件中有關對話方塊。 若要這樣做,您必須變更下列方案:

主要的 VSPackage 類別會使用 InstalledProductRegistration 屬性來指定想来尋找的資訊有關對話方塊。 在這個逐步解說中,主要類別為 FirstPackage,,您可以藉由開啟 FirstPackage.cs 或 FirstPackage.vb 來進行修改。

新的專案範本會產生下列的 InstalledProductRegistration 屬性。

<InstalledProductRegistration(    false, "#110", "#112", "1.0", IconResourceID := 400)>
[InstalledProductRegistration(    false, "#110", "#112", "1.0", IconResourceID = 400)]

"# 110"和"# 112"的資源 Id,請參閱字串資源,分別定義在 VSPackage.resx 檔案中,如下:

  • 110 指的是 FirstPackage

  • 112 指的是我的 VSPackage 的相關資訊

IconResourceID 400 指的是,如下所示定義在 VSPackage.resx 檔案中的 [資源] 資料夾中的 Package.ico 檔案。

<data name="400" type="System.Resources.ResXFileRef,
  System.Windows.Forms">
  <value>Resources\Package.ico;System.Drawing.Icon, System.Drawing,
    Version=2.0.0.0, Culture=neutral,
    PublicKeyToken=b03f5f7f11d50a3a
  </value>
</data>

若要自訂有關對話方塊中,變更 InstalledProductRegistration 的第一個引數屬性設定為true,使您的 VSPackage 可以提供適當的資訊,透過 IVsInstalledProduct 介面。

若要加入啟動顯示畫面和 [關於] 對話方塊中的自訂資訊

  1. 開啟 FirstPackage.cs 或 FirstPackage.vb,找出 InstalledProductRegistration 屬性,並變更它的引數,如下所示。

    InstalledProductRegistration(True, Nothing, Nothing, Nothing)
    
    [InstalledProductRegistration(true, null, null, null)]
    
  2. FirstPackage 類別是衍生自套件,並 IVsInstalledProduct。

    Public NotInheritable Class FirstPackage
        Inherits Package
        Implements IVsInstalledProduct
    
    public sealed class FirstPackage : Package, IVsInstalledProduct
    
  3. 隱含實作 IVsInstalledProduct 介面。 這個步驟中不同的 C# 和 Visual Basic。

    1. 在 C# 中隱含實作 IVsInstalledProduct 介面 」 停留在滑鼠IVsInstalledProduct。 [IntelliSense] 功能表出現時,按一下第一個項目。

      實作介面

      執行這項操作,是在 FirstPackage 類別中加入下列的虛設常式方法。 在接下來的步驟,您將會填入的方法。

      public int IdBmpSplash(out uint pIdBmp)
      {
          throw new NotImplementedException();
      }
      public int IdIcoLogoForAboutbox(out uint pIdIco)
      {
          throw new NotImplementedException();
      }
      public int OfficialName(out string pbstrName)
      {
          throw new NotImplementedException();
      }
      public int ProductDetails(out string pbstrProductDetails)
      {
          throw new NotImplementedException();
      }
      public int ProductID(out string pbstrPID)
      {
          throw new NotImplementedException();
      }
      
    2. 在 Visual Basic 中,加入下列程式碼的 FirstPackage 類別底部。 在接下來的步驟,您將會填入的方法。

      Function ProductDetails( _
          <OutAttribute()> ByRef pbstrProductDetails As String) _
      As Integer
      
      End Function
      
      Public Function IdBmpSplash(ByRef pIdBmp As UInteger) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.IdBmpSplash
      
      End Function
      
      Public Function IdIcoLogoForAboutbox(ByRef pIdIco As UInteger) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.IdIcoLogoForAboutbox
      
      End Function
      
      Public Function OfficialName(ByRef pbstrName As String) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.OfficialName
      
      End Function
      
      Public Function ProductID(ByRef pbstrPID As String) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.ProductID
      
      End Function
      
  4. 將複製從 Icon.ico < Visual Studio SDK 的安裝路徑 > \Common7\IDE\NewFileItems ,並將它貼在封裝方案中的 [資源] 資料夾中。

  5. 方案總管] 中,請以滑鼠右鍵按一下 [資源] 資料夾,指向 新增,然後按一下 現有項目。 檔案類型篩選器設為的所有檔案 (*。 *) ,然後新增 Icon.ico。

  6. 方案總管] 中VSPackage.resx,以滑鼠右鍵按一下,然後選擇 開啟。 選取 [ XML 編輯器 再利用 確定 XML 編輯器中開啟檔案。

  7. 加入下列幾行之前的最終</root>標記。

    <data name="500" type="System.Resources.ResXFileRef,   System.Windows.Forms">
      <value>Resources\GenericPackage.ico;    System.Drawing.Icon, System.Drawing, Version=2.0.0.0,    Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
      </value>
    </data>
    

    這個標記會將 Icon.ico 宣告為資源識別碼 500。

  8. 在 FirstPackage.cs 或 FirstPackage.vb,請使用下列程式碼取代 IVsInstalledProduct 介面的實作。

    Public Function ProductDetails(ByRef pbstrProductDetails As String) As Integer Implements IVsInstalledProduct.ProductDetails
        pbstrProductDetails = "This is my package"
        Return Microsoft.VisualStudio.VSConstants.S_OK
    End Function
    
    Public Function IdBmpSplash(ByRef pIdBmp As UInteger) _
    As Integer Implements IVsInstalledProduct.IdBmpSplash
        Return Microsoft.VisualStudio.VSConstants.S_OK
    End Function
    
    Public Function IdIcoLogoForAboutbox(ByRef pIdIco As UInteger) _
    As Integer Implements IVsInstalledProduct.IdIcoLogoForAboutbox
        pIdIco = 600
        Return Microsoft.VisualStudio.VSConstants.S_OK
    End Function
    
    Public Function OfficialName(ByRef pbstrName As String) _
    As Integer Implements IVsInstalledProduct.OfficialName
        pbstrName = "My Package"
        Return Microsoft.VisualStudio.VSConstants.S_OK
    End Function
    
    Public Function ProductID(ByRef pbstrPID As String) _
    As Integer Implements IVsInstalledProduct.ProductID
        pbstrPID = "My Package ID"
        Return Microsoft.VisualStudio.VSConstants.S_OK
    End Function
    
    public int IdBmpSplash(out uint pIdBmp) 
    { 
        return Microsoft.VisualStudio.VSConstants.S_OK; 
    } 
    public int IdIcoLogoForAboutbox(out uint pIdIco) 
    { 
        pIdIco = 500; 
        return Microsoft.VisualStudio.VSConstants.S_OK; 
    } 
    public int OfficialName(out string pbstrName) 
    { 
        pbstrName = "My Package"; 
        return Microsoft.VisualStudio.VSConstants.S_OK; 
    } 
    public int ProductDetails(out string pbstrProductDetails) 
    { 
        pbstrProductDetails = "This is my package"; 
        return Microsoft.VisualStudio.VSConstants.S_OK; 
    } 
    public int ProductID(out string pbstrPID) 
    { 
        pbstrPID = "My Package ID"; 
        return Microsoft.VisualStudio.VSConstants.S_OK; 
    } 
    

    第二個方法會傳回做為圖示的資源 ID。 剩下的三個函式傳回的名稱、 產品的詳細資訊和產品識別碼,所以它們將出現在有關對話方塊。

您可以藉由完成下列程序測試所做的變更。

若要測試的啟動顯示畫面和關於自訂的對話方塊方塊

  1. 方案總管] 中,第一個 [專案] 節點中,按一下滑鼠右鍵,再按 屬性。 此時會出現 [應用程式設計工具] 中。

  2. 按一下 [ 偵錯。 偵錯的 [選項] 窗格隨即出現。

  3. 命令列引數 方塊中,加入 /splash 切換。

    命令列開頭顯示參數

  4. 按下 F5 以開啟 Visual Studio 實驗性質的組建中。

  5. 幫助 ] 功能表中,按一下 有關 Microsoft Visual Studio

    有關出淚對話方塊並顯示您 VSPackage 的圖示及文字。

    說明的關於對話方塊

下一步

方案總管] 中工作清單是工具視窗的範例。 在逐步解說: 建立工具視窗 (第 2 部,共 4),您可以建立工具視窗,將停駐於 Visual Studio 中,並可讓您播放音樂檔案。

請參閱

概念

Visual Studio 的擴充性範例

其他資源

VSPackages

VSPackage 商標

VSPackage Load Keys

Reference.Package 範例

Reference.Package 範例