Dela via


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.

Referenser