Compartilhar via


Descobrindo serviços agenciados disponíveis

Serviços agenciados podem ser expostos pelo Visual Studio ou suas extensões. Este documento descreve como descobrir serviços agenciados expostos pelo Visual Studio.

Consulte a documentação de uma extensão para descobrir seus próprios serviços intermediados.

Classe de serviços do Visual Studio

O Visual Studio e o SDK do Visual Studio oferecem muitos serviços agenciados. Esses serviços são acessíveis por meio de um ServiceRpcDescriptor que muitas vezes pode ser obtido na VisualStudioServices classe.

Outros serviços agenciados podem existir e ser documentados com recursos específicos do Visual Studio.

A VisualStudioServices classe declara uma propriedade estática para várias versões principais ou secundárias do Visual Studio. Cada uma dessas propriedades retorna uma instância de uma classe que declara propriedades que expõem um para um ServiceRpcDescriptor serviço agenciado. Dessa forma, você pode descobrir prontamente o conjunto de serviços agenciados suportados por uma versão específica do Visual Studio.

Por exemplo, o serviço de solução agenciada foi introduzido no Visual Studio 2019 Atualização 5. O ServiceRpcDescriptor para este serviço pode ser obtido de VisualStudioServices.VS2019_5Services.SolutionService com código como este:

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

Considerações sobre a versão

Uma extensão do Visual Studio deve consumir um serviço agenciado usando a propriedade de versão VS disponível mais recente da VisualStudioServices classe, considerando a versão mínima necessária do Visual Studio que a extensão destina. Tomando o exemplo de serviço de solução anterior, isso significaria que uma extensão destinada ao Visual Studio 2019 Atualização 9 ou posterior deveria adquirir o descritor VisualStudioServices.VS2019_5Services.SolutionService da propriedade VisualStudioServices.VS2019_9. Vamos atualizar o exemplo anterior para o seguinte código:

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

Adquirir o descritor da propriedade versionada mais recente garante que o RPC do serviço seja o mais VisualStudioServices eficiente possível e o próprio serviço forneça o comportamento mais recente. Ao atualizar sua extensão para exigir uma versão mais recente do Visual Studio, considere revisar todo o VisualStudioServices uso da classe e atualizar referências a descritores para usar as propriedades versionadas mais recentes para corresponder à versão do Visual Studio que você está direcionando.

Um serviço intermediado que foi adquirido usando um ServiceRpcDescriptor de uma propriedade versionada mais VisualStudioServices antiga pode emular seu comportamento como era naquela versão mais antiga, incluindo possivelmente reproduzir comportamento peculiar ou limitações de recursos.

Uma extensão do Visual Studio que destina e é executada em uma versão específica do Visual Studio pode solicitar um serviço agenciado que acaba sendo ativado em uma conexão Live Share. Nesses casos, o processo remoto do Visual Studio pode estar executando uma versão diferente do processo local do Visual Studio. Uma solicitação para um serviço intermediado pode falhar em um convidado do Live Share durante uma sessão do Live Share quando o host do Live Share não oferece esse serviço intermediado da versão solicitada.

Considere incluir um plano de fallback para quando o serviço intermediado não estiver disponível. Esse plano de fallback pode incluir a solicitação do serviço agenciado novamente de uma propriedade versionada mais antiga, VisualStudioServices pois isso pode ser bem-sucedido se o host do Live Share for uma versão mais antiga do Visual Studio. Lembre-se de que, ao fazer isso, alguns membros da interface de serviço podem não estar disponíveis na própria implementação do serviço.

Um serviço agenciado pode adicionar membros à sua interface de serviço mesmo após o envio. Preste atenção à documentação do IntelliSense em cada membro da interface para ver se uma versão de serviço mínima necessária é mencionada nesse membro.

Uma tentativa de invocar um membro que o serviço remoto realmente não implementa lançará um RemoteMethodNotFoundExceptionarquivo .

Confira também