Kan geen service ophalen in Visual Studio SDK
Van toepassing op: Visual Studio
In dit artikel worden veelvoorkomende oorzaken en oplossingen geïntroduceerd wanneer u geen service kunt krijgen in de Visual Studio SDK.
Als de aangevraagde service niet kan worden verkregen, retourneert de aanroep om null te GetService retourneren. Test altijd op null na het aanvragen van een service:
IVsActivityLog log =
GetService(typeof(SVsActivityLog)) as IVsActivityLog;
if (log == null) return;
De service is niet geregistreerd bij Visual Studio
Controleer het systeemregister om te zien of de service correct is geregistreerd. Zie How to: Provide a service(s) voor meer informatie.
In het volgende voorbeeld .reg bestandsfragment ziet u hoe de SVsTextManager-service kan worden geregistreerd:
[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\<version number>\Services\{F5E7E71D-1401-11d1-883B-0000F87579D2}]
@="{F5E7E720-1401-11d1-883B-0000F87579D2}"
"Name"="SVsTextManager"
In dit voorbeeld is het versienummer de versie van Visual Studio, zoals 12.0 of 14.0, de sleutel {F5E7E71D-1401-11d1-883B-0000F87579D2}
is de service-id (SID) van de service, SVsTextManager en de standaardwaarde {F5E7E720-1401-11d1-883B-0000F87579D2}
is de pakket-GUID van de TEXT Manager VSPackage, die de service levert.
De service wordt aangevraagd op interfacetype en niet op servicetype
Gebruik het servicetype en niet het interfacetype wanneer u aanroept GetService
. Bij het aanvragen van een service van Visual Studio wordt Package de GUID uit het type geëxtraheerd. Er wordt geen service gevonden als:
- Er wordt een interfacetype doorgegeven aan
GetService
in plaats van het servicetype. - Er is geen GUID expliciet toegewezen aan de interface. Daarom maakt het systeem indien nodig een standaard-GUID voor een object.
De VSPackage die de service aanvraagt, is niet gesiteerd
Zorg ervoor dat de VSPackage die de service aanvraagt, is gesiteerd. Visual Studio sites a VSPackage after construct it and before calling Initialize.
Als u code hebt in een VSPackage-constructor die een service nodig heeft, verplaatst u deze naar de Initialize
methode.
De verkeerde serviceprovider wordt gebruikt
Zorg ervoor dat u de juiste serviceprovider gebruikt.
Niet alle serviceproviders zijn gelijk. De serviceprovider die Visual Studio doorgeeft aan een hulpprogrammavenster verschilt van het venster dat wordt doorgegeven aan een VSPackage. De tool window serviceprovider weet over STrackSelection, maar weet het niet over SVsRunningDocumentTable. U kunt bellen GetGlobalService om een VSPackage-serviceprovider op te halen vanuit een hulpprogrammavenster.
Als een hulpprogrammavenster als host fungeert voor een gebruikersbeheer of een andere besturingscontainer, wordt de container gesiteerd door het Windows-onderdeelmodel en heeft deze geen toegang tot Visual Studio-services. U kunt aanroepen GetGlobalService om een VSPackage-serviceprovider op te halen vanuit een besturingscontainer.