Condividi tramite


Non è possibile ottenere un servizio in Visual Studio SDK

Si applica a: Visual Studio

Questo articolo presenta le cause e le soluzioni comuni quando non è possibile ottenere un servizio in Visual Studio SDK.

Se il servizio richiesto non può essere ottenuto, la chiamata a GetService restituisce Null. Eseguire sempre il test per i valori Null dopo aver richiesto un servizio:

IVsActivityLog log =
    GetService(typeof(SVsActivityLog)) as IVsActivityLog;
if (log == null) return;

Il servizio non è registrato con Visual Studio

Esaminare il Registro di sistema per verificare se il servizio è stato registrato correttamente. Per altre informazioni, vedere Procedura: Fornire un servizio.

L'esempio seguente .reg frammento di file mostra come è possibile registrare il servizio SVsTextManager:

[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\<version number>\Services\{F5E7E71D-1401-11d1-883B-0000F87579D2}]
@="{F5E7E720-1401-11d1-883B-0000F87579D2}"
"Name"="SVsTextManager"

In questo esempio, il numero di versione è la versione di Visual Studio, ad esempio 12.0 o 14.0, la chiave {F5E7E71D-1401-11d1-883B-0000F87579D2} è l'identificatore del servizio (SID) del servizio, SVsTextManager e il valore {F5E7E720-1401-11d1-883B-0000F87579D2} predefinito è il GUID del pacchetto del vsPackage di gestione del testo, che fornisce il servizio.

Il servizio viene richiesto dal tipo di interfaccia e non dal tipo di servizio

Usare il tipo di servizio e non il tipo di interfaccia quando si chiama GetService. Quando si richiede un servizio da Visual Studio, Package estrae il GUID dal tipo . Un servizio non verrà trovato se:

  • Un tipo di interfaccia viene passato a GetService anziché al tipo di servizio.
  • All'interfaccia non viene assegnato alcun GUID in modo esplicito. Di conseguenza, il sistema crea un GUID predefinito per un oggetto in base alle esigenze.

Il pacchetto VSPackage che richiede il servizio non è stato sito

Assicurarsi che il pacchetto VSPackage che richiede il servizio sia stato sito. Visual Studio siti un VSPackage dopo averlo costruito e prima di chiamare Initialize.

Se si dispone di codice in un costruttore VSPackage che richiede un servizio, spostarlo nel Initialize metodo .

Viene usato il provider di servizi errato

Assicurarsi di usare il provider di servizi corretto.

Non tutti i provider di servizi sono uguali. Il provider di servizi passato da Visual Studio a una finestra degli strumenti è diverso da quello passato a un VSPackage. Il provider di servizi della finestra degli strumenti conosce STrackSelection, ma non conosce SVsRunningDocumentTable. È possibile chiamare GetGlobalService per ottenere un provider di servizi VSPackage dall'interno di una finestra degli strumenti.

Se una finestra degli strumenti ospita un controllo utente o qualsiasi altro contenitore di controlli, il contenitore verrà insito dal modello di componente di Windows e non avrà accesso ad alcun servizio di Visual Studio. È possibile chiamare GetGlobalService per ottenere un provider di servizi VSPackage dall'interno di un contenitore di controlli.

Riferimenti