关于 VisualStudio.Extensibility (预览版)

VisualStudio.Extensibility 是开发 Visual Studio 扩展的新框架,主要侧重于 IDE 中进程外运行的扩展,以提高性能和可靠性。 它采用一种现代异步 API,经过简化和精心设计,以最大限度地提高开发人员的工作效率。 VisualStudio.Extensibility 处于活动开发阶段,以预览版的形式提供。

使用当前预览版,可以为 Visual Studio 开发各种扩展,包括但不限于:

  • 创建命令
  • 在编辑器中使用代码或文本
  • 向用户显示提示或对话框
  • 创建调试器可视化工具

VisualStudio.Extensibility 旨在解决开发人员在 Visual Studio 中使用和编写扩展时遇到的许多问题。 使用 VisualStudio.Extensibility 编写扩展具有以下优势:

  • 可靠性提高:Visual Studio 保持灵活响应,即使扩展崩溃或挂起,程序本身也不会崩溃。
  • 降低 API 复杂性:VisualStudio.Extensibility 简化了体系结构、一致的 API 和清晰的文档。
  • 热加载功能:安装扩展时不需要重启 Visual Studio。

最终,你将能够使用 VisualStudio.Extensibility SDK 编写任何可以使用 Visual Studio SDK 编写的扩展。 但是,在此之前,可能会遇到 VisualStudio.Extensibility 中尚不提供扩展中所需的功能的情况。 在这种情况下,可以将 VisualStudio.Extensibility SDK 与进程内运行的 Visual Studio SDK 一起使用,以涵盖任何功能差距。 若要了解详细信息,请参阅 进程内扩展

有关 VisualStudio.Extensibility 的最新信息可以在 GitHub 上的 VSExtensibility 存储库的公告中找到。

文章 DESCRIPTION
安装 VisualStudio.Extensibility 下载并安装 VisualStudio.Extensibility 的最新预览版。
入门 如果之前尚未开发扩展,请从初学者快速入门和介绍性教程开始。
概念 构建 SDK 和扩展工作原理的精神模型。
概述 通过阅读每个主要功能领域的概述来了解详细信息。
示例 浏览演示主要功能的示例代码。
API 参考 浏览 VisualStudio.Extensibility API 文档。
实验 API 和破坏性更改 了解我们对稳定与实验性 API 的处理方法,以及以前版本中的不兼容变更。
已知问题 查看 VisualStudio.Extensibility SDK 的已知问题。
高级主题 了解 VisualStudio.Extensibility SDK 的实现详细信息。

安装 VisualStudio.Extensibility

当前的 VisualStudio.Extensibility 预览版适用于已经安装 Visual Studio extension development 工作负荷的 Visual Studio 2022 版本 17.9 预览版 1 或更高版本。

开始吧

以下文章可以帮助你熟悉并开始学习

若要了解如何使用 VisualStudio.Extensibility,建议全面了解使用 async 和 await 进行异步编程依赖注入。 此外,VisualStudio.Extensibility 中的 UI 基于 Windows Presentation Foundation (WPF),因此可能需要查看 WPF 文档

概念

如果您熟悉 Visual Studio SDK,请参阅 VisualStudio.Extensibility:VSSDK 用户简介

若要构建 Visual Studio 扩展工作原理的心理模型,请参阅 新的 Visual Studio 扩展的一部分 ,了解扩展的体系结构。 此外,可以阅读有关 依赖项注入 的信息,该注入用于在扩展的组件之间共享组件。

若要了解 SDK 中包含的内容,请参阅 SDK 的功能区域

扩展在 IDE 中应何时和何处显示? 满足某些条件时,Visual Studio 扩展将显示在 IDE 中。 若要控制扩展在 IDE 中的显示方式和时间,请参阅 基于规则的激活约束

Visual Studio 扩展通过贡献将其功能提供给 Visual Studio。 有关详细信息,请参阅 “贡献”

了解 VisualStudio.Extensibility 中使用的 远程 UI 模型。

概述

阅读扩展开发项目可能需要的 SDK 区域的概述。

  • 创建命令并将其公开给 IDE 中的用户,请参阅 命令
  • 请处理文件和文档内容,参阅 编辑器扩展
  • 使用这些文档本身的内存中表示形式,请参阅 “文档”。
  • 使用扩展中的输出窗口,请参阅 “输出”窗口
  • 在 Visual Studio IDE 中使用工具窗口和可停靠窗口,请参阅 工具窗口
  • 使用具有可自定义按钮的提示与用户交互,请参阅 用户提示
  • 使用具有自定义 UI 的对话与用户交互,请参阅 “对话”
  • 调试时创建自定义数据可视化效果,请参阅 调试器可视化工具
  • 查询或修改有关项目和解决方案的信息,请参阅 Project Query
  • 定义、读取和更新设置,请参阅 “设置”
  • 使用语言服务器/LSP 以获得更多语言支持,详见 语言服务器

示例和教程

可以在 Samples.sln找到包含所有示例的 Visual Studio 解决方案。

示例 DESCRIPTION
简单命令处理程序 演示使用命令的基础知识。 另请参阅 “创建第一个 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 和工具提示。
CompositeExtension 演示如何创建使用代理服务进行通信的进程内和进程外组件的扩展。

实验 API 和重大变更

从 17.9 版开始,我们已准备好将大部分 API 标记为稳定。 也就是说,我们不打算对这些 API 进行任何重大更改。 任何重大更改(比如由用户关于可用性的反馈所促成的更改)都将提前在我们的 重大更改 页面上正式发布,并提供充足的通知。

由于以下几个原因之一,我们的一些 API 尚未达到此稳定性标准:

  • 功能区域是新功能,将来的版本预期还会有其他功能和更改。
  • API 是新的,我们希望在将用户反馈纳入设计中,然后再将其标记为稳定。
  • 我们收到了特定 API 难以使用的反馈,因此我们计划在将来的版本中对其进行更新。

这些 API 使用 [Experimental] 特性显式标记,以帮助扩展作者在 SDK 中自信地创建扩展。

有关详细信息,包括如何使用实验 API,请参阅我们的 实验 API 页。

已知问题

我们感谢问题 跟踪器中的反馈和 bug 报告,我们努力解决 SDK 中发现的任何问题。

有关任何当前已知问题的信息,请访问“ 已知问题 ”页。

高级主题

文章 DESCRIPTION
其他远程 UI 概念 与使用远程 UI 模型相关的其他主题
高级远程 UI 有关远程 UI 模型的深入信息
过程内扩展 有关使用 VisualStudio.Extensibility SDK in-proc 的不同选项的快速演练

API 文档

发送反馈

我们正在积极寻求反馈和参与。 预览阶段是获取社区意见以帮助我们识别问题和机会的好时机。 你可以在 问题跟踪器中提供反馈并报告漏洞。