Découverte des services répartiteurs disponibles
Les services réparti peuvent être exposés par Visual Studio ou ses extensions. Ce document explique comment découvrir les services répartités exposés par Visual Studio.
Reportez-vous à la documentation d’une extension pour découvrir ses propres services répartis.
Classe Visual Studio Services
Visual Studio et le Kit de développement logiciel (SDK) Visual Studio offrent de nombreux services réparti. Ces services sont tous accessibles par le biais d’une ServiceRpcDescriptor classe qui peut souvent être obtenue à partir de la VisualStudioServices classe.
D’autres services réparti peuvent exister et être documentés avec des fonctionnalités Visual Studio spécifiques.
La VisualStudioServices classe déclare une propriété statique pour différentes versions majeures ou mineures de Visual Studio. Chacune de ces propriétés retourne une instance d’une classe qui déclare des propriétés qui exposent un ServiceRpcDescriptor service réparti. De cette façon, vous pouvez facilement découvrir l’ensemble des services répartités pris en charge par une version particulière de Visual Studio.
Par exemple, le service de solution réparti a été introduit dans Visual Studio 2019 Update 5. Pour ServiceRpcDescriptor ce service, vous pouvez obtenir à partir de VisualStudioServices.VS2019_5Services.SolutionService avec du code comme suit :
ServiceRpcDescriptor descriptor = Microsoft.VisualStudio.VisualStudioServices.VS2019_5.SolutionService;
Considérations relatives à la version
Une extension Visual Studio doit consommer un service réparti à l’aide de la dernière propriété de version VS disponible de la VisualStudioServices classe, compte tenu de la version minimale requise de Visual Studio cible par l’extension. En prenant l’exemple de service de solution précédent, cela signifie qu’une extension qui cible Visual Studio 2019 Update 9 ou version ultérieure doit acquérir le descripteur VisualStudioServices.VS2019_5Services.SolutionService à partir de la propriété VisualStudioServices.VS2019_9. Nous allons mettre à jour l’exemple précédent vers le code suivant :
ServiceRpcDescriptor descriptor = Microsoft.VisualStudio.VisualStudioServices.VS2019_9.SolutionService;
L’acquisition du descripteur à partir de la dernière propriété versionnée garantit VisualStudioServices que le rpc du service sera aussi efficace que possible et que le service lui-même fournira le comportement le plus récent. Lors de la VisualStudioServices mise à jour de votre extension pour exiger une version plus récente de Visual Studio, envisagez d’examiner l’utilisation de toutes les références de classe et de mettre à jour les références aux descripteurs afin d’utiliser les dernières propriétés avec version version de Visual Studio que vous ciblez.
Un service réparti qui a été acquis à l’aide d’une ServiceRpcDescriptor propriété avec version antérieure peut VisualStudioServices émuler son comportement tel qu’il était dans cette version plus ancienne, y compris éventuellement reproduire le comportement bizarre ou les limitations des fonctionnalités.
Une extension Visual Studio qui cible et s’exécute sur une version particulière de Visual Studio peut demander un service réparti qui finit par être activé sur une connexion Live Share. Dans ce cas, le processus Visual Studio distant peut exécuter une version différente du processus Visual Studio local. Une demande de service réparti peut échouer sur un invité Live Share pendant une session Live Share lorsque l’hôte Live Share n’offre pas ce service réparti de la version demandée.
Envisagez d’inclure un plan de secours pour le moment où le service réparti n’est pas disponible. Ce plan de secours peut inclure la demande du service réparti à nouveau à partir d’une propriété avec version antérieure, VisualStudioServices car cela pourrait réussir si l’hôte Live Share est une version antérieure de Visual Studio. N’oubliez pas que certains membres de l’interface de service peuvent ne pas être disponibles sur l’implémentation de service elle-même.
Un service réparti peut ajouter des membres à son interface de service même après l’expédition. Attention à la documentation IntelliSense sur chaque membre de l’interface pour voir si une version minimale requise du service est mentionnée sur ce membre.
Une tentative d’appel d’un membre que le service distant n’implémente pas réellement lève un RemoteMethodNotFoundException.