Det går inte att hämta en tjänst i Visual Studio SDK
Gäller för: Visual Studio
Den här artikeln beskriver vanliga orsaker och lösningar när du inte kan hämta en tjänst i Visual Studio SDK.
Om den begärda tjänsten inte kan hämtas returnerar anropet till GetService null. Testa alltid för null när du har begärt en tjänst:
IVsActivityLog log =
GetService(typeof(SVsActivityLog)) as IVsActivityLog;
if (log == null) return;
Tjänsten är inte registrerad i Visual Studio
Granska systemregistret för att se om tjänsten har registrerats korrekt. Mer information finns i Så här: Tillhandahålla en tjänst.
Följande exempel .reg filfragmentet visar hur SVsTextManager-tjänsten kan registreras:
[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\<version number>\Services\{F5E7E71D-1401-11d1-883B-0000F87579D2}]
@="{F5E7E720-1401-11d1-883B-0000F87579D2}"
"Name"="SVsTextManager"
I det här exemplet är versionsnumret versionen av Visual Studio, till exempel 12.0 eller 14.0, nyckeln {F5E7E71D-1401-11d1-883B-0000F87579D2}
är tjänstidentifieraren (SID) för tjänsten, SVsTextManager, och standardvärdet {F5E7E720-1401-11d1-883B-0000F87579D2}
är paket-GUID för texthanteraren VSPackage, som tillhandahåller tjänsten.
Tjänsten begärs efter gränssnittstyp och inte efter tjänsttyp
Använd tjänsttypen och inte gränssnittstypen när du anropar GetService
. När du begär en tjänst från Visual Studio Package extraherar du GUID från typen . Det går inte att hitta en tjänst om:
- En gränssnittstyp skickas till i stället för
GetService
tjänsttypen. - Inget GUID tilldelas uttryckligen till gränssnittet. Därför skapar systemet ett standard-GUID för ett objekt efter behov.
VSPackage som begär tjänsten har inte placerats på plats
Kontrollera att VSPackage som begär tjänsten har placerats på plats. Visual Studio webbplatser en VSPackage efter att ha konstruerat den och innan du anropar Initialize.
Om du har kod i en VSPackage-konstruktor som behöver en tjänst flyttar du den Initialize
till -metoden.
Fel tjänstleverantör används
Se till att du använder rätt tjänstleverantör.
Alla tjänsteleverantörer är inte likadana. Tjänstleverantören som Visual Studio skickar till ett verktygsfönster skiljer sig från den som den skickar till en VSPackage. Tjänsteleverantören för verktygsfönstret känner till STrackSelection, men vet inte om SVsRunningDocumentTable. Du kan anropa GetGlobalService för att hämta en VSPackage-tjänstleverantör från ett verktygsfönster.
Om ett verktygsfönster är värd för en användarkontroll eller någon annan kontrollcontainer placeras containern av Windows-komponentmodellen och har inte åtkomst till några Visual Studio-tjänster. Du kan anropa GetGlobalService för att hämta en VSPackage-tjänstprovider inifrån en kontrollcontainer.