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 SDK programu Visual Studio.

Jeśli nie można uzyskać żądanej usługi, wywołanie 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 systemowy, aby sprawdzić, czy usługa została poprawnie zarejestrowana. Aby uzyskać więcej informacji, zobacz Instrukcje: udostępnianie 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 programu VSPackage menedżera tekstów, który udostępnia usługę.

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

Użyj typu usługi, a nie typu interfejsu podczas wywoływania polecenia GetService. Podczas żądania usługi z programu Visual Studio Package wyodrębnia identyfikator GUID z typu. Nie można odnaleźć usługi, jeśli:

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

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

Upewnij się, że pakiet VSPackage żądający usługi został umiejscowiony. Program Visual Studio tworzy pakiet VSPackage po jego utworzeniu i przed wywołaniem polecenia 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 odpowiedniego 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 dostawcy, który jest przekazywany do pakietu VSPackage. Dostawca usługi okna narzędzi wie o STrackSelection, ale nie wie o SVsRunningDocumentTable. Możesz wywołać polecenie GetGlobalService , aby uzyskać dostawcę usługi VSPackage z poziomu okna narzędzia.

Jeśli okno narzędzia hostuje kontrolkę użytkownika lub inny kontener sterowania, kontener zostanie umiejscowiona 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ć polecenie GetGlobalService , aby uzyskać dostawcę usługi VSPackage z kontenera kontroli.

Informacje