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.