Freigeben über


Gewusst wie: Problembehandlung von Diensten

Es gibt einige allgemeine Probleme beim Abrufen von Diensten bereit:

  • Der Dienst ist nicht mit Visual Studioregistriert.

  • Der Dienst wird durch Schnittstellentyp und nicht durch angeforderten Diensttyp.

  • VSPackage, das den Dienst anfordert, ist nicht positioniert.

  • Der falsche Dienstanbieter wird verwendet.

Wenn der angeforderte Dienst nicht ermittelt werden kann, gibt der Aufruf von GetService NULL zurück. Sie sollten immer NULL für testen, nachdem Sie einen Dienst angefordert haben:

Dim log As IVsActivityLog = TryCast(GetService(GetType(SVsActivityLog)), IVsActivityLog)
If log Is Nothing Then 
    Return 
End If
IVsActivityLog log = GetService(typeof(SVsActivityLog)) as IVsActivityLog;
if (log == null) return;

Um einen Dienst zu beheben

  1. Überprüfen Sie die Systemregistrierung, um festzustellen, ob der Dienst ordnungsgemäß registriert wurde. Weitere Informationen finden Sie unter Registrieren von Diensten.

  2. Verwenden Sie den Diensttyp und nicht den Schnittstellentyp, wenn Sie GetService aufrufen. Wenn ein Dienst von Visual Studioanfordert, extrahiert Package die GUID des Typs. Ein Dienst wurde nicht gefunden, wenn folgende Bedingungen vorliegen:

    1. Ein Schnittstellentyp ist auf GetService anstelle des Diensttyps übergeben.

    2. Keine GUID der Schnittstelle wird explizit zugewiesen. Aus diesem Grund erstellt das System einen GUID für ein Objekt nach Bedarf.

  3. Stellen Sie sicher, dass ein VSPackage, das den Dienst anfordert, positioniert wurde. Visual Studio Websites VSPackage, nachdem es erstellt wurde und bevor Initializeaufgerufen wird.

    Wenn Sie Code in einem VSPackage-Konstruktor verfügen, der einen Dienst erfordert, verschieben Sie ihn in die Initialize-Methode.

  4. Stellen Sie sicher, dass Sie den richtigen Dienstanbieter verwenden.

    Nicht alle Dienstanbieter sind gleich. Der Dienstanbieter, der Visual Studio auf ein Toolfenster, unterscheidet sich von dem aus, an das es einem VSPackage wird. Der Toolfenster in weiß dienstanbieter STrackSelectionaus, sondern hat keine Kenntnis von SVsRunningDocumentTableaus. Sie können GetGlobalService aufrufen, um einen VSPackage-Dienstanbieter aus einem Toolfenster abzurufen. Weitere Informationen finden Sie unter Gewusst wie: GetGlobalService Verwendung.

    Wenn Hosts eines Toolfensters ein Benutzersteuerelement oder ein beliebiger anderer Steuerelementcontainer, der Container werden vom Modell für Windows-Komponenten positioniert und nicht den Zugriff auf beliebige Visual Studio Dienste verfügen. Sie können GetGlobalService aufrufen, um einen VSPackage-Dienstanbieter aus einem Steuerelementcontainer abzurufen. Weitere Informationen finden Sie unter Gewusst wie: GetGlobalService Verwendung.

Siehe auch

Konzepte

Liste der verfügbaren Dienste

Dienst-Grundlagen

Weitere Ressourcen

Dienste