关于 VisualStudio.Extensibility(预览版)
VisualStudio.Extensibility 是用于开发 Visual Studio 扩展的新框架,它主要侧重于在 IDE 中从进程外运行的扩展,以便提高性能和可靠性。 它具有现代化的异步 API,而该 API 经过简化和精心设计,可最大限度地提高开发人员的工作效率。 VisualStudio.Extensibility 正处于积极开发阶段,并会以预览版的形式提供。
借助当前预览版,可开发 Visual Studio 的各种扩展,包括创建命令、在编辑器中使用代码或文本、向用户显示提示或对话框、创建调试器可视化工具等!
VisualStudio.Extensibility 旨在解决开发人员在 Visual Studio 中使用和编写扩展时遇到的诸多问题。 使用 VisualStudio.Extensibility 编写扩展具有以下优势:
- 提高可靠性:Visual Studio 会保持响应,且在扩展崩溃或挂起时也不会崩溃。
- 降低 API 复杂性:VisualStudio.Extensibility 具有简化的体系结构、一致的 API 和清晰的文档。
- 热加载功能:安装扩展时无需重启 Visual Studio。
最终,可使用 VisualStudio.Extensibility SDK 来编写可通过 VS SDK 编写的任意扩展。 但在此之前,可能会出现扩展中所需功能在 VisualStudio.Extensibility 中尚不可用的情况。 在此情况下,可将 VisualStudio.Extensibility SDK 与进程内运行的 VS SDK 一起使用,从而弥补所有功能差距。 若要了解详细信息,请参阅进程内扩展。
有关 VisualStudio.Extensibility 的最新信息可在公告处的 VSExtensibility GitHub 存储库中找到。
浏览文档
文章 | 说明 |
---|---|
安装 VisualStudio.Extensibility | 下载并安装 VisualStudio.Extensibility 的最新预览版。 |
入门 | 如果以前从未开发过扩展,请从初学者快速入门和入门教程开始。 |
概念 | 构建有关 SDK 和扩展的工作原理的心理模型。 |
概述 | 通过阅读每个主要功能领域的概述来了解更多信息。 |
示例 | 浏览用于展示主要功能的示例代码。 |
API 参考 | 浏览 VisualStudio.Extensibility API 文档。 |
实验性 API 和重大变更 | 了解我们针对稳定与实验性 API 的方法,以及与上一版本相比出现的重大变更。 |
已知问题 | 查看 VisualStudio.Extensibility SDK 的已知问题。 |
高级主题 | 了解 VisualStudio.Extensibility SDK 的实现详细信息。 |
安装 VisualStudio.Extensibility
当前的 VisualStudio.Extensibility 预览版适用于 Visual Studio 2022 版本 17.9 预览版 1 或更高版本(且需安装 Visual Studio extension development
工作负荷)。
开始使用
以下文章有助于熟悉相关环境并开始使用
- 创建第一个 Visual Studio 扩展展示了如何创建“Hello, world”的等效扩展。
- 创建简易扩展展示了如何创建更有趣的扩展,从而将 GUID 添加到编辑器窗口。
若要了解如何使用 VisualStudio.Extensibility,建议全面了解使用 async 和 await 的异步编程和依赖项注入。 此外,VisualStudio.Extensibility 中的 UI 基于 Windows Presentation Foundation (WPF),因此可能需查看 WPF 文档。
概念
如果熟悉 Visual Studio SDK,请参阅面向 VSSDK 用户的 VisualStudio.Extensibility 简介。
若要构建 Visual Studio 扩展工作原理的心理模型,请参阅新 Visual Studio 扩展的组成部分。
若要了解 SDK 中包含的内容,请参阅 SDK 的功能区域。
扩展在 IDE 中应于何时在何地出现? 满足某些条件时,Visual Studio 扩展会显示在 IDE 中。 若要控制扩展在 IDE 中的显示方式和时间,请参阅基于规则的激活约束。
Visual Studio 扩展通过贡献将其功能提供给 Visual Studio。 有关详细信息,请参阅贡献。
了解 VisualStudio.Extensibility 中使用的远程 UI 模型。
概述
阅读扩展开发项目可能需要的 SDK 区域的概述。
- 若要在 IDE 中创建命令并将其公开给用户,请参阅命令。
- 若要处理文件与文档的内容,请参阅编辑器扩展。
- 若要处理这些文档自身的内存中表示形式,请参阅文档。
- 若要在扩展中使用输出窗口,请参阅输出窗口。
- 若要在 Visual Studio IDE 中使用工具窗口和可停靠窗口,请参阅工具窗口。
- 若要使用具有可自定义按钮的提示以便与用户交互,请参阅用户提示。
- 若要使用具有自定义 UI 的对话框以便与用户交互,请参阅对话框。
- 若要在调试时创建自定义数据可视化效果,请参阅调试器可视化工具。
- 若要查询或修改有关项目沙盒解决方案的信息,请参阅项目查询。
- 若要使用语言服务器/LSP 来获取其他语言支持,请参阅语言服务器提供程序。
示例和教程
可在 Samples.sln 中找到包含所有示例的 Visual Studio 解决方案。
示例 | 说明 |
---|---|
简易命令处理程序 | 展示使用命令的基础知识。 另请参阅创建第一个 Visual Studio 扩展教程。 |
插入 guid 扩展 | 展示如何在代码编辑器中插入文本或代码,如何配置附带特定激活条件的命令,以及如何使用资源文件进行本地化。 另请参阅创建简易扩展教程。 |
命令父级 | 展示如何创作一个命令,而该命令可作为 IDE 不同方面的父级。 |
文档选择器 | 展示如何创建仅适用于与文件路径模式匹配的文件的编辑器扩展。 |
“输出”窗口 | 展示输出窗口 API 的最基本用法 |
工具窗口 | 展示如何创建工具窗口并用内容填充该窗口。 |
用户提示 | 展示如何向用户显示提示。 |
对话框 | 展示如何向用户显示具有自定义 UI 的对话框。 |
字数范围 | 展示如何创建用于显示文档中字数的编辑器范围扩展。 |
Markdown Linter | 展示多个组件如何在扩展中共同交互,以及如何扩展 Visual Studio 的不同区域。 |
项目查询 | 展示可执行的几种不同类型的项目系统查询。 |
注释删除器 | 展示如何通过 .NET 依赖项注入使用 Visual Studio SDK 服务,以及如何将 VisualStudio.Extensibility API 用于命令、提示和进度报告。 |
RegexMatchDebugVisualizer | 展示如何使用远程 UI 来创建调试器可视化工具,从而可视化将在模式对话框窗口中启动的正则表达式匹配项。 |
MemoryStreamDebugVisualizer | 展示如何创建调试器可视化工具以可视化将在非模式工具窗口中启动的 MemoryStream 对象。 |
RustLanguageServiceProvider | 展示如何创建 Rust 语言服务器提供程序扩展,而该扩展会在打开 Rust 文件时添加 Intellisense 和工具提示。 |
实验性 API 和重大变更
从 17.9 版本开始,我们已准备好将绝大多数 API 标记为稳定版。 换言之,我们不打算对这些 API 进行任何重大变更。 可能需执行的所有重大变更(例如,响应用户对可用性的反馈)都将在我们的重大变更页面上正式传达并充分告知。
由于以下若干原因之一,我们的某些 API 尚未达到此稳定性标准:
- 此功能区域为新增功能,且预计在未来版本中会引入其他功能和更改。
- 该 API 为新 API,而我们希望在将其标记为稳定版之前先将用户反馈纳入其设计。
- 我们已收到反馈表示某一特定 API 很难使用,因此我们计划在未来版本中对其进行更新。
对于这些 API,我们已使用 [Experimental]
属性对其进行显式标记,从而帮助扩展作者在 SDK 中自信地创建扩展。
有关更多信息,包括如何使用实验性 API,请参阅我们的实验性 API 页面。
已知问题
我们非常感谢你在问题跟踪器中提供的反馈和 bug 报告,而我们也会努力解决在 SDK 中发现的所有问题。
有关所有当前已知问题的信息,请访问已知问题页面。
高级主题
文章 | 说明 |
---|---|
高级远程 UI | 有关远程 UI 模型的深入信息 |
进程中扩展 | 有关在进程中使用 VisualStudio.Extensibility SDK 的不同选项的快速演练 |
API 文档
- Microsoft.VisualStudio.Extensibility
- Microsoft.VisualStudio.Extensibility.Editor
- Microsoft.VisualStudio.ProjectSystem.Query
发送反馈
我们正在积极寻求反馈和参与。 预览阶段是获取社区意见以帮助我们发现问题和机遇的大好时机。 你可在我们的问题跟踪器中提供反馈并报告 bug。