Condividi tramite


Non è possibile ottenere un servizio in Visual Studio SDK

Si applica a: Visual Studio

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

Se non è possibile ottenere il servizio richiesto, la chiamata a GetService restituisce Null. Verificare sempre 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 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 testo, che fornisce il servizio.

Il servizio è 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 . Non verrà trovato un servizio se:

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

Il pacchetto VSPackage che richiede il servizio non è stato inseriti

Assicurarsi che il pacchetto VSPackage che richiede il servizio sia stato inseriti. Visual Studio siti un VSPackage dopo la costruzione 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 simili. 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à ospitato dal modello di componente Windows e non avrà accesso ai servizi di Visual Studio. È possibile chiamare GetGlobalService per ottenere un provider di servizi VSPackage dall'interno di un contenitore di controllo.

Riferimenti