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.