语言服务和编辑器扩展入门

可以使用编辑器扩展将语言服务功能(如大纲显示、大括号匹配、IntelliSense 和灯泡)添加到你自己的编程语言或任何内容类型。 还可以自定义 Visual Studio 编辑器的外观和行为,例如文本着色、边距、装饰和其他视觉元素。 还可以定义自己的内容类型,并指定显示内容的文本视图的外观和行为。

若要开始编写编辑器扩展,请使用作为 Visual Studio SDK 一部分安装的编辑器项目模板。 Visual Studio SDK 是一组可下载的工具,可通过 VSPackage 或托管扩展框架(MEF)更轻松地开发 Visual Studio 扩展。

注意

有关 Visual Studio SDK 的详细信息,请参阅 Visual Studio SDK

建议在编写自己的编辑器扩展之前了解以下概念和技术。

Windows Presentation Foundation (WPF) 和编辑器扩展

Visual Studio 编辑器用户界面(UI)是使用 Windows Presentation Foundation (WPF) 实现的。 WPF 提供丰富的视觉体验和一致的编程模型,该模型将代码的视觉方面与业务逻辑分开。 创建编辑器扩展时,可以使用许多 WPF 元素和功能。 有关详细信息,请参阅 Windows Presentation Foundation

托管扩展性框架(MEF)和编辑器扩展

Visual Studio 编辑器使用托管扩展性框架(MEF)来管理其组件和扩展。 MEF 还允许开发人员更轻松地为主机应用程序(如 Visual Studio)创建扩展。 在此框架中,根据 MEF 协定定义扩展,并将其导出为 MEF 组件部件。 主机应用程序通过查找组件部件、注册组件部件并确保它们应用于正确的上下文来管理组件部件。

注意

有关编辑器中的 MEF 的详细信息,请参阅 编辑器中的托管扩展性框架。

Visual Studio 编辑器扩展点和扩展

编辑器扩展点是可以自定义和扩展的 MEF 组件部件。 在某些情况下,通过实现接口并将其与正确的元数据一起导出来扩展扩展点。 在其他情况下,只需声明扩展并将其导出为特定类型。

下面是一些基本类型的编辑器扩展:

部署编辑器扩展

在 Visual Studio 中,通过将名为 source.extension.vsixmanifest 的元数据文件添加到解决方案、生成解决方案,然后在 Visual Studio 已知的文件夹中添加二进制文件和清单的副本来部署编辑器扩展。 清单文件定义有关扩展的基本事实(例如,名称、作者、版本和内容类型)。 有关 VSIX 清单文件以及如何部署扩展的详细信息,请参阅 Ship Visual Studio 扩展

在计算机上安装扩展时,请将二进制文件和清单包含在 Visual Studio 已知的文件夹的子文件夹中。

警告

如果使用 Visual Studio 中包含的编辑器扩展性模板之一,则无需担心清单和部署位置的详细信息。 模板包含注册和部署扩展所需的所有内容。

在实验实例中运行扩展

通过在以下实验文件夹中部署扩展(在 Windows Vista 和 Windows 7 上),可以在开发扩展时隔离 Visual Studio 的工作版本:

{%LOCALAPPDATA%}\VisualStudio\10.0Exp\Extensions\{Company}\{ExtensionID}

其中 %LOCALAPPDATA% 是登录用户的名称, 公司 是拥有扩展的公司的名称, ExtensionID 是扩展的 ID。

将扩展部署到实验位置时,它会在调试模式下运行。 启动 Visual Studio 的第二个实例,并命名为 Microsoft Visual Studio - 实验实例

管理扩展

Visual Studio 的扩展列在“扩展”和“汇报”(“工具”菜单上)。 如果要在实验实例中测试扩展,则会在扩展和实验实例汇报中列出该扩展,但未在开发实例中列出。

有关详细信息,请参阅 “查找和使用 Visual Studio 扩展”。

使用模板创建编辑器扩展

可以使用编辑器模板创建 MEF 扩展,用于自定义分类器、装饰和边距。 C# 和 Visual Basic 项目都有模板。 有关详细信息,请参阅使用编辑器项模板创建扩展

还可以使用 VSIX 项目模板创建扩展。 此模板仅提供部署任何类型的扩展所需的元素,并包括 source.extension.vsixmanifest 文件、所需的程序集引用以及包含用于部署扩展的生成任务的项目文件。 有关详细信息,请参阅 VSIX 项目模板

还可以从 Visual Studio 包扩展创建编辑器 MEF 组件。 有关详细信息,请参阅以下演练: