Udostępnij za pośrednictwem


Nie można pobrać usługi w zestawie Visual Studio SDK

Dotyczy: Visual Studio

W tym artykule przedstawiono typowe przyczyny i rozwiązania, gdy nie można uzyskać usługi w zestawie Visual Studio SDK.

Jeśli nie można uzyskać żądanej usługi, wywołanie metody GetService zwraca wartość null. Zawsze testuj wartość null po żądaniu usługi:

IVsActivityLog log =
    GetService(typeof(SVsActivityLog)) as IVsActivityLog;
if (log == null) return;

Usługa nie jest zarejestrowana w programie Visual Studio

Sprawdź rejestr systemu, aby sprawdzić, czy usługa została poprawnie zarejestrowana. Aby uzyskać więcej informacji, zobacz How to: Provide a service (Instrukcje: zapewnianie usługi).

Poniższy przykładowy fragment pliku .reg pokazuje, jak można zarejestrować usługę SVsTextManager:

[HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\<version number>\Services\{F5E7E71D-1401-11d1-883B-0000F87579D2}]
@="{F5E7E720-1401-11d1-883B-0000F87579D2}"
"Name"="SVsTextManager"

W tym przykładzie numer wersji jest wersją programu Visual Studio, taką jak 12.0 lub 14.0, kluczem {F5E7E71D-1401-11d1-883B-0000F87579D2} jest identyfikator usługi (SID) usługi, SVsTextManager, a wartością {F5E7E720-1401-11d1-883B-0000F87579D2} domyślną jest identyfikator GUID pakietu menedżera tekstu VSPackage, który zapewnia usługę.

Usługa jest żądana przez typ interfejsu, a nie według typu usługi

Użyj typu usługi, a nie typu interfejsu podczas wywoływania metody GetService. Podczas żądania usługi z programu Visual Studio Package wyodrębnia identyfikator GUID z typu . Usługa nie zostanie znaleziona, jeśli:

  • Typ interfejsu jest przekazywany do GetService zamiast typu usługi.
  • Żaden identyfikator GUID nie jest jawnie przypisany do interfejsu. W związku z tym system tworzy domyślny identyfikator GUID dla obiektu zgodnie z potrzebami.

Pakiet VSPackage żądający usługi nie został lokacji

Upewnij się, że pakiet VSPackage żądający usługi został lokacji. Program Visual Studio tworzy pakiet VSPackage po jego utworzeniu i przed wywołaniem metody Initialize.

Jeśli masz kod w konstruktorze VSPackage, który wymaga usługi, przenieś go do Initialize metody .

Używany jest niewłaściwy dostawca usług

Upewnij się, że używasz poprawnego dostawcy usług.

Nie wszyscy dostawcy usług są podobni. Dostawca usług, który program Visual Studio przekazuje do okna narzędzia, różni się od tego, który przekazuje do pakietu VSPackage. Dostawca usług okna narzędzi wie o STrackSelectionsystemie , ale nie wie o SVsRunningDocumentTable. Możesz wywołać metodę GetGlobalService , aby uzyskać dostawcę usług VSPackage z poziomu okna narzędzi.

Jeśli okno narzędzi hostuje kontrolkę użytkownika lub inny kontener sterowania, kontener zostanie lokacjonowany przez model składników systemu Windows i nie będzie miał dostępu do żadnych usług programu Visual Studio. Możesz wywołać metodę GetGlobalService , aby uzyskać dostawcę usługi VSPackage z poziomu kontenera sterowania.

Informacje