逐步解說: 建立語言服務 (管理的套件架構)
使用受管理的封裝 (MPF) 架構語言類別來實作語言服務在Visual C#相當簡單。 您必須為裝載語言服務、 語言服務本身,以及您的語言剖析器的 VSPackage。
必要條件
若要完成這個逐步解說中,您必須安裝Visual Studio 2010 SDK。
注意事項 |
---|
如需有關 Visual Studio 的 SDK 的詳細資訊,請參閱擴充 Visual Studio 的概觀。若要了解如何下載 Visual Studio 的 SDK,請參閱Visual Studio 擴充性開發人員中心 MSDN 網站上。 |
Visual Studio 的封裝專案範本的位置
Visual Studio 的封裝專案範本,請參閱以下三個不同的範本位置,在新的專案對話方塊:
在 [Visual Basic 擴充性。 專案的預設語言是 Visual Basic。
在 [C# 擴充性。 專案的預設語言是 C#。
在 [其他專案的型別擴充性。 專案的預設語言是 c + +。
建立 VSPackage
以 Visual Studio 的封裝的專案範本建立新的 VSPackage。
如果您語言服務来加入現有的 VSPackage,跳過下列步驟,並直接跳到 「 建立語言服務類別 」 程序。
輸入 MyLanguagePackage 的專案名稱,然後按一下確定。
您可以使用任何您想要的名稱。 以下詳述這些程序會假設 MyLanguagePackage 做為名稱。
選取 [ Visual C#做為該語言,並產生新的金鑰檔的選項。 按一下 [下一步]。
請輸入適當的公司和套件資訊。 按一下 [下一步]。
選取 [ 功能表命令。 按一下 [下一步]。
如果您不想支援程式碼片段,就可以按 [完成],並略過下一個步驟。
輸入插入程式碼片段為指令名稱 和 cmdidInsertSnippet 的命令 ID。 按一下 [完成]。
指令名稱 和 命令 ID 可以是任何您想要的結果,這些都是只是範例。
建立語言服務類別
在 [方案總管] 中,MyLanguagePackage 專案上按一下滑鼠右鍵,然後選取加入參考。
在加入參考 對話方塊中,選取 Microsoft.VisualStudio.Package.LanguageService 在 。NET 索引標籤,然後按一下 [ 確定。
這需要進行一次語言套件的專案。
在 [方案總管] 中,VSPackage 專案上按一下滑鼠右鍵,然後選取新增 -> 類別。
請確定類別在 [範本] 清單中選取。
輸入 MyLanguageService.cs 類別檔案的名稱,然後按一下新增。
您可以使用任何您想要的名稱。 以下詳述這些程序假設MyLanguageService做為名稱。
在 MyLanguageService.cs 檔案中加入下列using陳述式。
Imports Microsoft.VisualStudio Imports Microsoft.VisualStudio.Package Imports Microsoft.VisualStudio.TextManager.Interop Imports Microsoft.VisualStudio.OLE.Interop
using Microsoft.VisualStudio; using Microsoft.VisualStudio.Package; using Microsoft.VisualStudio.TextManager.Interop; using Microsoft.VisualStudio.OLE.Interop;
修改MyLanguageService類別來衍生自LanguageService類別:
Friend Class MyLanguageService Inherits LanguageService
class MyLanguageService : LanguageService
將插入號,在"LanguageService",並從編輯 -> IntelliSense 功能表上,選取實作抽象類別。 如此會將所需的最小方法,實作語言服務類別。
實作抽象方法,如所述實作語言服務 (管理的套件架構)。
語言服務的暫存器
開啟 MyLanguagePackagePackage.cs 檔案,然後加入下列using陳述式:
Imports Microsoft.VisualStudio Imports Microsoft.VisualStudio.Package Imports Microsoft.VisualStudio.TextManager.Interop
using Microsoft.VisualStudio; using Microsoft.VisualStudio.Package; using Microsoft.VisualStudio.TextManager.Interop;
註冊您的語言服務類別中所述正在註冊語言服務 (管理的套件架構)。 這包括 ProvideXX 屬性和 「 Proffering 語言服務 」 區段。 使用本主題而使用 TestLanguageService 的 MyLanguageService。
剖析器與掃瞄器
實作中所述的剖析器與您的語言的掃瞄器語言服務剖析及掃描程式 (受管理的封裝架構)。
如何實作您的掃描器和剖析器時,完全取決於您,而又已超出本主題的範圍。
語言服務功能
語言服務中實作每項功能,您通常是衍生自適當的 MPF 語言服務類別的類別、 實作所有抽象方法有必要時,並覆寫適當的方法。 您想要支援您建立及/或衍生自哪些類別所相依的功能。 這些功能中會詳細討論在語言服務功能 (受管理的封裝架構)。 下列程序是從 MPF 類別衍生出類別的一般方法。
衍生自 MPF 類別
在方案總管] 中、 VSPackage 專案上按一下滑鼠右鍵,然後選取 新增 -> 類別。
請確定類別在 [範本] 清單中選取。
請輸入一個合適的名稱,做為類別檔案按一下新增。
在新的類別檔案中,加入下列using陳述式。
Imports Microsoft.VisualStudio Imports Microsoft.VisualStudio.Package Imports Microsoft.VisualStudio.TextManager.Interop Imports Microsoft.VisualStudio.OLE.Interop
using Microsoft.VisualStudio; using Microsoft.VisualStudio.Package; using Microsoft.VisualStudio.TextManager.Interop; using Microsoft.VisualStudio.OLE.Interop;
修改從您想要的 MPF 類別衍生的類別。
新增類別建構函式可接受的最少的基底類別建構函式相同的參數,傳遞至基底類別建構函式的建構函式參數。
比方說,類別的建構函式衍生自Source類別可能如下所示:
Namespace MyLanguagePackage Friend Class MySource Inherits Source Public Sub New(ByVal service As LanguageService, ByVal textLines As IVsTextLines, ByVal colorizer As Colorizer) MyBase.New(service, textLines, colorizer) End Sub End Class End Namespace
namespace MyLanguagePackage { class MySource : Source { public MySource(LanguageService service, IVsTextLines textLines, Colorizer colorizer) : base(service, textLines, colorizer) { } } }
從編輯 -> IntelliSense 功能表上,選取實作抽象類別如果基底類別必須實作所有抽象方法。
否則,將放置在類別內有插入號,然後輸入要被覆寫的方法。
例如,輸入公用覆寫來查看清單,可在該類別中覆寫所有方法。