发现可用的中转服务

中转服务可由 Visual Studio 或其扩展公开。 本文档介绍如何发现 Visual Studio 公开的中转服务。

请参阅扩展的文档来发现其自己的中转服务。

Visual Studio 服务类

Visual Studio 和 Visual Studio SDK 提供了许多中转服务。 可通过通常从VisualStudioServices类获取的一个ServiceRpcDescriptor访问这些服务。

可能存在其他中转服务,并记录特定 Visual Studio 功能。

VisualStudioServices 类为 Visual Studio 的各种主要或次要版本声明静态属性。 其中每个属性返回一个类的实例,该实例声明为中转服务公开 ServiceRpcDescriptor 的属性。 这样,便可以轻松发现特定版本的 Visual Studio 支持的中转服务集。

例如,Visual Studio 2019 Update 5 中引入了中转解决方案服务。 可以使用 ServiceRpcDescriptor 如下所示的代码从 VisualStudioServices.VS2019_5Services.SolutionService 获取此服务:

ServiceRpcDescriptor descriptor = Microsoft.VisualStudio.VisualStudioServices.VS2019_5.SolutionService;

版本注意事项

Visual Studio 扩展应使用类中的最新可用 VS 发布属性 VisualStudioServices 的中转服务,考虑到扩展面向的 Visual Studio 的最低所需版本。 以以前的解决方案服务示例为例,这意味着面向 Visual Studio 2019 Update 9 或更高版本的扩展应从 VisualStudioServices.VS2019_9 属性获取 VisualStudioServices.VS2019_5Services.SolutionService 描述符。 让我们将前面的示例更新为以下代码:

ServiceRpcDescriptor descriptor = Microsoft.VisualStudio.VisualStudioServices.VS2019_9.SolutionService;

从最新版本的属性 VisualStudioServices 获取描述符可确保服务 RPC 尽可能高效,并且服务本身将提供最新行为。 将扩展更新为需要较新版本的 Visual Studio 时,请考虑查看对类的所有用法 VisualStudioServices ,并更新对描述符的引用,以使用最新版本控制的属性来匹配所面向的 Visual Studio 版本。

使用 ServiceRpcDescriptor 较旧版本属性 VisualStudioServices 获取的中转服务可能会模拟其行为,因为它处于该旧版本,包括可能重现古怪行为或功能限制。

面向特定版本的 Visual Studio 并在特定版本的 Visual Studio 上运行的 Visual Studio 扩展可能会请求最终在 Live Share 连接中激活的中转服务。 在这种情况下,远程 Visual Studio 进程可能运行与本地 Visual Studio 进程不同的版本。 当 Live Share 主机不提供所请求版本的中转服务时,对实时共享来宾的请求可能会在 Live Share 会话中失败。

请考虑在中转服务不可用时包括回退计划。 此回退计划可能包括从旧版本控制属性再次请求中转服务,因为如果 Live Share 主机是较旧版本的 Visual Studio,该属性 VisualStudioServices 可能会成功。 请记住,这样做时,服务接口的某些成员在服务实现本身上可能不可用。

即使寄送后,中转服务 也可以将成员 添加到其服务接口。 请注意接口的每个成员上的 IntelliSense 文档,以查看该成员上是否提及了最低所需的服务版本。

尝试调用远程服务实际上未实现的成员将引发一个 RemoteMethodNotFoundException

另请参阅