Freigeben über


Ein Dienst kann im Visual Studio SDK nicht abgerufen werden.

Gilt für: Visual Studio

In diesem Artikel werden häufige Ursachen und Lösungen vorgestellt, wenn Sie keinen Dienst im Visual Studio SDK abrufen können.

Wenn der angeforderte Dienst nicht abgerufen werden kann, gibt der Aufruf null GetService zurück. Test immer auf NULL nach dem Anfordern eines Diensts:

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

Der Dienst ist nicht bei Visual Studio registriert.

Überprüfen Sie die Systemregistrierung, um festzustellen, ob der Dienst ordnungsgemäß registriert wurde. Weitere Informationen finden Sie unter How to: Provide a service.

Das folgende Beispiel .reg Dateifragment zeigt, wie der SVsTextManager-Dienst registriert werden kann:

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

In diesem Beispiel ist die Versionsnummer die Versionsnummer von Visual Studio, z. B. 12.0 oder 14.0, der Schlüssel {F5E7E71D-1401-11d1-883B-0000F87579D2} ist der Dienstbezeichner (SID) des Diensts, SVsTextManager, und der Standardwert {F5E7E720-1401-11d1-883B-0000F87579D2} ist die Paket-GUID des Text-Managers VSPackage, der den Dienst bereitstellt.

Der Dienst wird nach Schnittstellentyp und nicht nach Diensttyp angefordert.

Verwenden Sie den Diensttyp und nicht den Schnittstellentyp, wenn Sie aufrufen GetService. Wenn Sie einen Dienst aus Visual Studio anfordern, Package extrahiert sie die GUID aus dem Typ. Ein Dienst wird nicht gefunden, wenn:

  • Anstelle des Diensttyps wird ein Schnittstellentyp übergeben GetService .
  • Der Schnittstelle wird keine GUID explizit zugewiesen. Daher erstellt das System bei Bedarf eine Standard-GUID für ein Objekt.

Die VSPackage, die den Dienst anfordert, wurde nicht vor Ort gestellt.

Stellen Sie sicher, dass die VSPackage, die den Dienst anfordert, websiteiert wurde. Visual Studio sites a VSPackage after constructing it and before calling Initialize.

Wenn Sie Code in einem VSPackage-Konstruktor haben, der einen Dienst benötigt, verschieben Sie ihn in die Initialize Methode.

Der falsche Dienstanbieter wird verwendet.

Stellen Sie sicher, dass Sie den richtigen Dienstanbieter verwenden.

Nicht alle Dienstleister sind gleich. Der Dienstanbieter, den Visual Studio an ein Toolfenster übergibt, unterscheidet sich von dem, das an ein VSPackage übergeben wird. Der Toolfenster-Dienstanbieter kennt STrackSelectiondies, weiß aber nicht über SVsRunningDocumentTable. Sie können aufrufen GetGlobalService , um einen VSPackage-Dienstanbieter aus einem Toolfenster abzurufen.

Wenn ein Toolfenster ein Benutzersteuerelement oder einen anderen Steuerelementcontainer hostt, wird der Container vom Windows-Komponentenmodell gespeichert und hat keinen Zugriff auf Visual Studio-Dienste. Sie können aufrufen GetGlobalService , um einen VSPackage-Dienstanbieter aus einem Steuerelementcontainer abzurufen.

References