深入探究 Visual Studio SDK

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

扩展性体系结构

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

环境体系结构图形

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 的下图,其中包含几个工具窗口:

屏幕截图

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

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

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

文档窗口

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

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

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

编辑器

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

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

语言服务

如果希望 Visual Studio 编辑器支持新的编程关键字甚至新的编程语言,请创建语言服务。 每个语言服务都可以完全、部分,或完全不执行某些编辑器功能。 语言服务可以根据配置方式,提供语法突出显示、大括号匹配、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 安装 VSPackage

帮助查看器

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