深入探究 Visual Studio SDK

本部分提供有关 Visual Studio 扩展的深入信息,包括 Visual Studio 体系结构、组件、服务、架构、实用工具等。

扩展性体系结构

下图显示了 Visual Studio 扩展性体系结构。 VSPackage 提供应用程序功能,在 IDE 中作为服务共享。 标准 IDE 还提供广泛的服务,例如 SVsUIShell提供对 IDE 窗口功能的访问权限。

Environment Architecture graphic Visual Studio 体系结构的通用视图

VSPackages

VSPackage 是软件模块,它们通过 UI 元素、服务、项目、编辑器和设计器来组成并扩展 Visual Studio。 VSPackage 是 Visual Studio 的中心体系结构单元。 有关更多信息,请参见 VSPackages

Visual Studio Shell

Visual Studio shell 提供基本功能并支持其组件 VSPackage 和 MEF 扩展之间的跨通信。 有关详细信息,请参阅 Visual Studio Shell

用户体验指南

如果打算为 Visual Studio 设计新功能,则应查看以下设计和可用性提示指南: Visual Studio 用户体验指南

命令

命令是完成任务(如打印文档、刷新视图或创建新文件)的函数。

扩展 Visual Studio 时,可以创建命令并将其注册到 Visual Studio shell。 可以指定这些命令在 IDE 中的显示方式,例如,在菜单或工具栏上。 通常,自定义命令会显示在“工具”菜单上,用于显示工具窗口的命令将显示在“视图”菜单的其他 Windows 子菜单中。

创建命令时,还必须为其创建事件处理程序。 事件处理程序确定命令何时可见或启用,允许修改其文本,并保证命令在激活时做出适当响应。 在大多数情况下,IDE 使用 IOleCommandTarget 接口处理命令。 从最内部的命令上下文(基于本地选择)开始处理 Visual Studio 中的命令,并根据全局选择继续到最外部的上下文。 添加到主菜单的命令可立即用于脚本编写。

有关详细信息,请参阅 命令、菜单和工具栏

菜单和工具栏为用户提供调用命令的方法。 菜单是通常显示为工具窗口顶部的各个文本项的命令的行或列。 子菜单是当用户单击包含小箭头的命令时显示的辅助菜单。 当用户右键单击某些 UI 元素时,将显示上下文菜单。 一些常见的菜单名称是“文件”、“编辑”、“视图”和“窗口”。 有关详细信息,请参阅 扩展菜单和命令

工具栏是按钮和其他控件的行或列,例如组合框、列表框和文本框。 工具栏按钮通常具有图标图像,例如“打开文件”命令的文件夹图标或打印命令的打印机。 所有工具栏元素都与命令相关联。 单击工具栏按钮时,其关联的命令将运行。 对于下拉列表控件,下拉列表中的每个项都与不同的命令相关联。 某些工具栏控件(如拆分器控件)是混合控件。 控件的一侧是工具栏按钮,另一侧是向下箭头,单击时显示多个命令。

工具窗口

工具窗口在 IDE 中用于显示信息。 工具箱解决方案资源管理器属性窗口和 Web 浏览器是工具窗口的示例。

工具窗口通常提供用户可与之交互的各种控件。 例如,“ 属性” 窗口允许用户设置用于特定用途的对象的属性。 “ 属性” 窗口在此意义上是专用的,但也一般,因为它可以在许多不同的情况下使用。 同样, “输出 ”窗口是专用的,因为它提供基于文本的输出,但一般是因为 Visual Studio 中的许多子系统都可以使用它向 Visual Studio 用户提供输出。

请考虑 Visual Studio 的下图,其中包含多个工具窗口:

Screen shot

某些工具窗口停靠在一个窗格中,其中显示解决方案资源管理器工具窗口并隐藏其他工具窗口,但可通过单击选项卡使其可用。 图中显示了另外两个工具窗口,即 “错误列表 ”和 “输出 ”窗口,停靠在单个窗格中。

此外,还显示了主文档窗格,其中显示了多个编辑器窗口。 尽管工具窗口通常只有一个实例(例如,只能打开一个解决方案资源管理器),但编辑器窗口可以有多个实例,其中每个实例用于编辑单独的文档,但所有实例都停靠在同一窗格中。 图片显示一个文档窗格,其中包含两个编辑器窗口,一个窗体设计器窗口。 通过单击选项卡,文档窗格中的所有窗口均可用,但包含 EditorPane.cs 文件的编辑器窗口可见且处于活动状态。

扩展 Visual Studio 时,可以创建工具窗口,以便 Visual Studio 用户与扩展交互。 还可以创建自己的编辑器,以便 Visual Studio 用户编辑文档。 由于工具窗口和编辑器将集成到 Visual Studio 中,因此无需对其进行编程以正确停靠或显示在选项卡上。 在 Visual Studio 中正确注册它们时,它们将自动在 Visual Studio 中具有工具窗口和文档窗口的典型功能。 有关详细信息,请参阅 扩展和自定义工具窗口

文档窗口

文档窗口是多文档界面(MDI)窗口的框架子窗口。 文档窗口通常用于托管文本编辑器、窗体编辑器(也称为设计器)或编辑控件,但它们也可以托管其他功能类型。 “ 新建文件 ”对话框包括 Visual Studio 提供的文档窗口示例。

大多数编辑器特定于编程语言或文件类型,例如 HTML 页面、框架集、C++ 文件或头文件。 通过在“新建文件”对话框中选择模板,用户为与模板关联的文件类型动态创建文档窗口。 当用户打开现有文件时,还会创建文档窗口。

文档窗口仅限于 MDI 工作区。 每个文档窗口顶部都有一个选项卡,选项卡顺序链接到可能在 MDI 区域中打开的其他窗口。 右键单击文档窗口的选项卡将显示一个快捷菜单,其中包含将 MDI 区域拆分为多个水平或垂直选项卡组的选项。 拆分 MDI 区域可同时查看多个文件。 有关详细信息,请参阅 文档 Windows

编辑器

Visual Studio 编辑器允许你通过托管扩展性框架(MEF)自定义它并将其用于你自己的内容类型。 在许多情况下,无需创建 VSPackage 来扩展编辑器,尽管如果要包括 shell 中的功能(例如菜单命令或快捷键),则可以将 MEF 扩展与 VSPackage 组合在一起。

还可以创建自定义编辑器,例如,如果要读取和写入数据库,或者想要使用设计器。 还可以使用外部编辑器,例如记事本或 Microsoft WordPad。 有关详细信息,请参阅 编辑器和语言服务扩展

语言服务

如果希望 Visual Studio 编辑器支持新的编程关键字 (keyword)甚至新的编程语言,请创建语言服务。 每个语言服务都可以完全、部分或根本不实现某些编辑器功能。 语言服务可以根据配置方式提供语法突出显示、大括号匹配、IntelliSense 支持以及编辑器中的其他功能。

语言服务的核心是分析器和扫描仪。 扫描程序(或词法器)将源文件划分为称为令牌的元素,分析器在这些令牌之间建立关系。 创建语言服务时,必须实现分析器和扫描程序,以便 Visual Studio 能够理解语言的标记和语法。 可以创建托管语言服务或非托管语言服务。 有关详细信息,请参阅 旧版语言服务扩展性

项目

在 Visual Studio 中,项目是开发人员用来组织和生成源代码和其他资源的容器。 项目允许你组织、生成、调试和部署源代码、对 Web 服务和数据库的引用以及其他资源。 VSPackage 可以通过提供项目类型、项目子类型和自定义工具来扩展 Visual Studio 项目系统。

还可以将项目聚集在一起 的解决方案中,该解决方案是一个或多个协同工作以创建应用程序的项目分组。 与解决方案相关的项目和状态信息存储在两个解决方案文件中,即基于 文本的解决方案 (.sln) 文件和 二进制 解决方案用户选项 (.suo) 文件。 这些文件类似于在早期版本的 Visual Basic 中使用的组(.vbg)文件,以及在早期版本的 C++ 中使用的工作区(.dsw)和用户选项(.opt)文件。

有关详细信息,请参阅 项目解决方案

项目和项模板

Visual Studio 包括预定义的项目模板和项目项模板。 还可以创建自己的模板或从社区获取模板,然后将其集成到 Visual Studio 中。 MSDN 代码库 是用于模板和扩展的位置。

模板包含生成特定类型的应用程序、控件、库或类所需的项目结构和基本文件。 如果要开发类似于其中一个模板的软件,请创建一个基于模板的项目,然后修改该项目中的文件。

注意

Visual C++ 项目不支持此模板体系结构。

有关详细信息,请参阅 “添加项目”和“项目项模板”。

属性和选项

属性” 窗口显示单个或多个选定项的属性: “扩展属性 选项”页包含一组与特定组件相关的选项,例如编程语言或 VSPackage: 选项和选项页。 设置通常是可以导入和导出的与 UI 相关的功能: 支持用户设置

Visual Studio 服务

服务提供一组特定的接口供组件使用。 Visual Studio 提供了一组服务,可供任何组件(包括扩展)使用。 例如,Visual Studio 服务允许工具窗口动态显示或隐藏,启用对帮助、状态栏或 UI 事件的访问权限。 Visual Studio 编辑器还提供可由编辑器扩展导入的服务。 有关详细信息,请参阅 “使用和提供服务”。

调试器

调试器是特定于语言的调试组件的用户界面。 如果已创建新的语言服务,则需要创建特定的调试引擎以挂接到调试器。 有关详细信息,请参阅 Visual Studio 调试器扩展性

源代码管理

有关实现源代码管理插件或 VSPackage 的信息,请参阅 源代码管理

向导

可以结合新项目类型创建向导,以便向导可帮助用户在创建该类型的新项目时做出正确的决策。 有关详细信息,请参阅 向导

自定义工具

使用自定义工具可将工具与项目中的项相关联,并在保存文件时运行该工具。 有关详细信息,请参阅 自定义工具

VSSDK 实用工具

VSSDK 包含一组可能需要的实用工具,以便处理 VSPackage 的不同方面。 有关详细信息,请参阅 VSSDK 实用工具

使用 Windows Installer

在某些情况下,可能需要使用 Windows Installer 而不是 VSIX 安装程序:例如,可能需要写入注册表。 有关将 Windows Installer 与扩展配合使用的信息,请参阅 使用 Windows Installer 安装 VSPackages。

帮助查看器

可以将自己的帮助和 F1 页面集成到帮助查看器中。 有关详细信息,请参阅 Microsoft 帮助查看器 SDK