演练:创建语言服务 (托管包结构)

使用托管包结构 (MPF)切换实现在 Visual C# 的语言服务非常简单。 需要 VSPackage 承载语言服务、语言服务以及该语言的分析器。

系统必备

若要完成本演练,您必须安装 Visual Studio 2010 SDK。

备注

有关 Visual Studio SDK 的更多信息,请参见 扩展 Visual Studio 概述。若要查找有关中所列如何下载 Visual Studio SDK,请 Visual Studio Extensibility Developer Center 参见 MSDN 网站上。

Visual Studio 包 " 项目模板的位置

Visual Studio 包 " 项目模板可以在 新项目 对话框的三个不同的模板位置找到:

  1. 在 Visual Basic 扩展性下。 该项的默认语言是 Visual Basic。

  2. 在 C# 扩展性下。 该项目的默认语言是 C#。

  3. 在其他项下键入扩展性。 该项的默认语言是 C++。

创建 VSPackage

  1. 使用 Visual Studio 包 " 项目模板创建新的 VSPackage。

    如果添加语言服务添加到现有的 VSPackage,请跳过以下步骤并直接转到 “创建语言服务类”过程。

  2. 为项目输入的名称 MyLanguagePackage 然后单击

    可以使用任何名称需要。 详细的这些过程假定 MyLanguagePackage 作为名称。

  3. 选择 Visual C# 作为语言和选项生成一个新密钥文件。 单击**“下一步”**。

  4. 输入适当的公司和包信息。 单击**“下一步”**。

  5. 选择 菜单命令。 单击**“下一步”**。

    如果不想支持代码段,可以单击完成并忽略下一步。

  6. 输入插入代码段作为 命令名 和 cmdidInsertSnippet命令 ID的。 单击**“完成”**。

    命令名命令 ID 可以是您想要,这些是一个示例。

创建语言服务类

  1. 在解决方案资源管理器中,右击 " MyLanguagePackage 项目并选择 添加引用

  2. 添加引用 对话框中,选择 " Microsoft.VisualStudio.Package.LanguageService.NET 选项并单击

    这需要对语言包 " 项目仅执行一次。

  3. 在解决方案资源管理器中,右击在 VSPackage 项目并选择 添加 - AMP_GT

  4. 确定 在模板列表中选择项。

  5. 在类文件的名称 MyLanguageService.cs 然后单击 添加

    可以使用任何名称需要。 详细的这些过程假定 MyLanguageService 作为名称。

  6. 在 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;
    
  7. 修改 MyLanguageService 类从 LanguageService 类派生:

       Friend Class MyLanguageService
            Inherits LanguageService
    
    class MyLanguageService : LanguageService
    
  8. 确定插入符号在 “LanguageService”并从 编辑 - AMP_GT IntelliSense 菜单,选择 " 实现抽象类。 这将添加极小必要方法实现语言服务类。

  9. 执行抽象方法。 实现语言服务 (托管包结构)所述。

注册语言服务

  1. 打开 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;
    
  2. 注册 注册语言服务 (托管包结构)如中所述的语言服务类。 这包括 ProvideXX 属性和 “提供语言服务”部分。 使用本主题使用 TestLanguageService 的 MyLanguageService。

分析器和扫描仪

语言服务功能

若要实现每个功能在语言服务,您从相应的 MPF 语言服务类通常派生类,根据需要执行所有抽象方法,并重写相应的方法。 哪些类中创建和/或从派生取决于要支持的功能。 这些函数在 语言服务功能 (托管包结构)详细讨论。 下面的过程是泛型方法的派生类从 MPF 类。

从派生 MPF 类

  1. 解决方案资源管理器,右击在 VSPackage 项目并选择 添加 - AMP_GT

  2. 确定 在模板列表中选择项。

    输入一个适当的名称类文件并单击 添加

  3. 在新的类文件中,添加以下 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;
    
  4. 修改类从所需 MPF 类派生。

  5. 添加至少带有参数和基类的构造函数相同的类构造函数并传递构造函数参数到基类构造函数。

    例如,从 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)
            {
            }
        }
    }
    
  6. 编辑 - AMP_GT IntelliSense 菜单上,选择 实现抽象类 ,如果基类具有必须执行的所有抽象方法。

  7. 否则,请确保类中的插入符号并输入方法将重写。

    例如,键入 public overrides 会在该类中重写任何方法的列表。

请参见

其他资源

实现使用托管包结构的语言服务