Condividi tramite


Individuazione dei servizi negoziati disponibili

I servizi negoziati possono essere esposti da Visual Studio o dalle relative estensioni. Questo documento descrive come individuare i servizi negoziati esposti da Visual Studio.

Fare riferimento alla documentazione di un'estensione per individuare i propri servizi negoziati.

Classe di servizi di Visual Studio

Visual Studio e Visual Studio SDK offrono molti servizi negoziati. Questi servizi sono accessibili tramite un oggetto ServiceRpcDescriptor che spesso può essere ottenuto dalla VisualStudioServices classe .

Altri servizi negoziati possono esistere e essere documentati con funzionalità specifiche di Visual Studio.

La VisualStudioServices classe dichiara una proprietà statica per varie versioni principali o secondarie di Visual Studio. Ognuna di queste proprietà restituisce un'istanza di una classe che dichiara proprietà che espongono un ServiceRpcDescriptor oggetto per un servizio negoziato. In questo modo, è possibile individuare facilmente il set di servizi negoziati supportati da una determinata versione di Visual Studio.

Ad esempio, il servizio soluzione negoziata è stato introdotto in Visual Studio 2019 Update 5. Il ServiceRpcDescriptor per questo servizio può essere ottenuto da VisualStudioServices.VS2019_5Services.SolutionService con codice simile al seguente:

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

Considerazioni sulla versione

Un'estensione di Visual Studio deve usare un servizio negoziato usando la proprietà di versione di Visual Studio disponibile più recente dalla VisualStudioServices classe , considerando la versione minima richiesta di Visual Studio di destinazione dell'estensione. Prendendo l'esempio di servizio della soluzione precedente, significa che un'estensione destinata a Visual Studio 2019 Update 9 o versione successiva deve acquisire il descrittore VisualStudioServices.VS2019_5Services.SolutionService dalla proprietà VisualStudioServices.VS2019_9. Si aggiornerà ora l'esempio precedente al codice seguente:

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

L'acquisizione del descrittore dalla proprietà con versione più recente su VisualStudioServices garantisce che il servizio RPC sarà il più efficiente possibile e il servizio stesso fornirà il comportamento più recente. Quando si aggiorna l'estensione per richiedere una versione più recente di Visual Studio, è consigliabile esaminare tutti gli usi della VisualStudioServices classe e aggiornare i riferimenti ai descrittori per usare le proprietà con versione più recenti in modo che corrispondano alla versione di Visual Studio di destinazione.

Un servizio negoziato acquisito usando un ServiceRpcDescriptor da una proprietà con controllo delle versioni precedente su VisualStudioServices può emulare il suo comportamento così com'era in quella versione precedente, inclusa la riproduzione di comportamenti strane o limitazioni delle funzionalità.

Un'estensione di Visual Studio destinata e eseguita in una determinata versione di Visual Studio può richiedere un servizio negoziato che finisce per essere attivato in una connessione Live Share. In questi casi, il processo remoto di Visual Studio potrebbe eseguire una versione diversa dal processo locale di Visual Studio. Una richiesta di un servizio negoziato potrebbe non riuscire in un guest di Live Share durante una sessione di Live Share quando l'host di Live Share non offre tale servizio negoziato della versione richiesta.

Prendere in considerazione l'inclusione di un piano di fallback per quando il servizio negoziato non è disponibile. Questo piano di fallback può includere la richiesta di nuovo del servizio negoziato da una proprietà con controllo delle versioni precedente su VisualStudioServices , in quanto potrebbe avere esito positivo se l'host live Share è una versione precedente di Visual Studio. Tenere presente che, quando si esegue questa operazione, alcuni membri dell'interfaccia del servizio potrebbero non essere disponibili nell'implementazione del servizio stessa.

Un servizio negoziato può aggiungere membri all'interfaccia del servizio anche dopo la spedizione. Prestare attenzione alla documentazione di IntelliSense su ogni membro dell'interfaccia per verificare se su tale membro è menzionata una versione minima del servizio necessaria.

Un tentativo di richiamare un membro che il servizio remoto non implementa effettivamente genererà un'eccezione RemoteMethodNotFoundException.

Vedi anche