扩展和生态系统支持
Visual Studio Live Share 的主要目标之一是使开发人员能够轻松地与他们最喜爱的工具和高度自定义的工具相互协作。 这样一来,就可以频繁地进行即席交互,而不考虑您的帮助。 为实现此目的,协作会话内的参与者能够继续使用支持其 个人首选项和工作流 的任何扩展,这一点很重要 (例如,彩色/图标主题、键绑定、编辑器生产力 enhancers) 。
此外,若要使协作会话尽快加入协作会话,同时保持高效率,则 Visual Studio Live Share 的目标是使来宾能够自动利用其主机共享的特定于项目的工具。 这样,你只需单击一个链接,启动你选择的工具并开始协作,而无需进行任何额外的设置。 为实现此目的,将核心 编辑、构建和调试工作流的能力从主机透明地 "远程" 的扩展从主机透明地 "远程",使之成为一项非常重要的关键。
本文档介绍了大规模扩展生态系统的当前已知状态,以及上述目标的 "记分卡"。 如果遇到不符合此条件的扩展,这对个人工作流至关重要,请 告诉我们!
User-Specific 扩展
支持特定于用户的自定义的扩展 必须 适用于主机,并且 应对 所有来宾都有效。 如果某个扩展在主机上不能正常工作,这会是一种回归方法,并且很可能是 Visual Studio Live Share 中的 bug (如果您看到一条! ) ,请解决问题。 如果某个扩展没有按预期方式工作,则它可能需要 在扩展本身中进行更改,并且我们将与生态系统合作来处理/改进这些方案。
Visual Studio Code
类别 | 示例 (s) | 来宾-支持? | 协作? |
---|---|---|---|
颜色主题 | 一个深色 Pro, Output Colorizer,彩虹 String,彩色区域,缩进块突出显示,待办事项,方括号对 Colorizer | ✅ | 不适用 |
图标集 | vscode-图标, Visual Studio 经典图标 | ✅ | 不适用 |
键绑定 | Vim, IntelliJ 创意键绑定, Emacs 友好快捷键映射 | ✅ | 不适用 |
代码片段 | Angular v5 代码段, HTML 代码段, SVG 图标,文件头 | ✅ | N/A1 |
组织 | 设置同步、 Project 管理器、 Timeit、检查点、 TODO 分析器、收藏夹 (❌) 、书签 (❌) | ✅2 | 不适用3 |
工作效率 | GitLens, 自动重命名标记, 代码大纲, 颜色突出显示, 增量选择, Bracketeer, 图像预览, JSON 帮助 程序 (悬停) , 颜色选取器, 在光标中复制单词, CodeMetrics (CodeLens) , Git 共同作者, JavaScript 增强 程序 (CodeActions) , Turbo Console 日志, 转到下一个/上一个成员, 自动滚动, NPM 导入版本 (❌) , 进口 Cost (❌) | ✅2 | ❌3 |
Repl | REST 客户端、 代码运行程序、 Quokka.js、 R | ✅4 | ❌3 |
资源管理器 | mssql, ftp-简单, Azure Functions, Docker, Brew Services | ✅5 | ❌3 |
1除非用户已熟悉代码段,否则他们将无法使用它,因此使它们共享不一定有意义。
2这些扩展类别非常多样化,因此不可能说它们都在运行。但理论上,它们应该是,我们会跟踪不是的键。
3这些扩展类别可能会受益于协作体验,因此我们需要最终用户反馈来了解!
4它们要求来宾安装运行时工具 (例如 Node.js) ,并通过在本地运行代码来工作。
5这些操作的工作方式是连接到某种类型的服务器,并且可以与来宾共享的服务器一起使用。
Visual Studio
即将推出。
Project-Specific 扩展
主机安装的扩展(支持应用程序的核心编辑、构建和调试,以及特定于语言/平台/库/SDK)应该自动提供给来宾,无需安装任何内容。 这样一来,主机就可以设置其环境,以支持项目的高效开发,并允许其来宾即时加入这些项目,而无需额外的先决条件。 由于特定于项目的扩展不会以任何方式进行主观或个性化,因此,它们可以从主机到来宾进行明确共享,而不会影响任何熟悉的环境。
此外,为了支持来宾已安装的特定于项目的扩展,但主机未提供,理想情况下会提供降级但功能丰富的体验 (例如,获取单个文件 intellisense,能够将文档) 格式。
类别 | 示例 (s) | 共享? | 来宾-支持? |
---|---|---|---|
语法/语法突出显示 | 鱼 Shell、 Nginx、 Vetur、 DotEnv、 ES6 String HTML、 Todo +、 彩虹 CSV | ❌ | ✅ |
语言服务 | YAML, 路径 Intellisense, ARM | ✅1 | ✅2 |
JSON 架构 | Azure Functions | ✅ | ✅ |
Linter | ESLint、 Markdownlint、 代码拼写检查器、 PHPCS | ✅ | ✅2 |
格式化程序 | 外观、 Beautify | ✅ | ✅2 |
调试程序 | Python, 适用于 Chrome 的调试器 | ✅3 | ❌4 |
测试流 | Java 测试运行程序, Mocha 边栏, Postman 运行程序, Jest 运行程序, Neptune | ❌5 | ✅2 |
自定义文件预览 | SVG Preview、 GraphViz、 Markdown 图像大小 | ❌ | ✅ |
文件/Project 生成器 | Azure Functions, c/c + + Project 生成器 | ❌ | ❌6 |
源代码管理提供程序 | SVN、 Hg | ❌ | ❌ |
1目前只有 c # 和 JavaScript/TypeScript,即将推出更多支持。
2仅支持当前活动文档,因为来宾没有本地文件访问权限。
3核心调试体验是共享的,但是,任何已启动的服务器不会自动转发。
4来宾没有应用的本地副本,因此,运行中的应用和任何调试会话都需要在主机的计算机上启动。
5测试运行的输出需要同时与来宾共享生成的任何终端、输出窗格和错误。
6几乎所有这些都可以直接使用 Node.js fs
模块来创建文件,这不起作用。
Visual Studio
即将推出。
已知问题
下面是已知的扩展问题,这可能会阻止它们在协作会话的上下文中使用来宾 (及其解决方法) ,因此可能会影响其工作流:
Visual Studio Code
问题 | Reason | 解决方法 |
---|---|---|
使用 Node.js fs 模块来检测/读取文件 (例如,配置文件) 或枚举目录 (,而不是语言服务) 。 |
来宾没有本地文件访问权限。 | 1.如果可能) ,请适当地降低用户体验 (。 2. 使用 openTextDocument 和 findFiles 工作区 api 来读取和枚举文件。 |
使用 Node.js fs 模块创建或写入文件 |
同上 | 不适用您可以使用 openTextDocument(Uri) API 创建 untitled 文件,但不能将其直接保存到文件系统中的特定路径。 |
根据项目捆绑的库或工具 | 同上 | 1. 使用扩展绑定依赖项的回退版本 2. 支持全局安装,以便在用户选择显式安装时解除阻止。 3. 远程执行状态/操作(如果可能),因为主机会提供正确的依赖项。 |
使用 Node.js fs 模块创建目录 |
同上 | 不适用 |
将功能限制为使用 file 方案的文档。 |
来宾端的文件使用 vsls 方案。 |
添加对文档的 vsls 支持 (示例) |
Uri.file 使用方法和/或 Uri.fsPath /TextDocument.fileName 成员序列化/分析 uri |
同上 | 使用 Uri.parse 和 Url.toString() 来维护和遵循文件方案 (示例) |
将 workspace.openTextDocument 方法用于文件路径而不是 Uri |
同上 | Uri 提供实例,而不是原始文件路径字符串 (示例) |
workspace.rootPath 使用属性检测工作区是否存在 |
workspace.rootPath 属性在中的第一个 workspaceFolder 中 workspace 调用 Uri.fsPath ,此问题与上面提到的问题相同 |
workspace.workspaceFolders 使用属性来检测是否存在工作区,并在需要时查看每个 workspaceFolder Uri.scheme 工作区是否为本地工作区 |
注册语言服务时未指定文档方案 (通过 LanguageClient 或 languages.register* 方法) |
来宾从其本地扩展和主机接收语言服务结果,因此,如果两个参与方都安装了相同的语言服务扩展,则来宾将看到特定内容的重复条目 (例如自动完成、代码操作) | 将语言服务仅限 file 和 untitled 方案 (示例) |
在填充 DiagnosticCollection 文档之前,不检查文档 Uri.scheme |
同上 | 仅生成 Diagnostics documents 其 file Uri.scheme === (示例) |
从自定义中返回 Tasks 时不检查工作区方案 TaskProvider |
来宾显示所有远程和本地任务,因此,如果两个参与者都安装了相同的扩展,则会显示重复项 | 仅返回 Tasks (示例) 的 WorkspaceFolder Uri.scheme === file |
Visual Studio
即将推出。