Partager via


Impossible d’obtenir un service dans le Kit de développement logiciel (SDK) Visual Studio

              S’applique à : Visual Studio

Cet article présente les causes courantes et les solutions lorsque vous ne pouvez pas obtenir un service dans le Kit de développement logiciel (SDK) Visual Studio.

Si le service demandé ne peut pas être obtenu, l’appel à GetService retourne null. Toujours tester la valeur null après la demande d’un service :

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

Le service n’est pas inscrit auprès de Visual Studio

Examinez le registre système pour voir si le service a été correctement inscrit. Pour plus d’informations, consultez Guide pratique pour fournir un service.

L’exemple suivant .reg fragment de fichier montre comment le service SVsTextManager peut être inscrit :

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

Dans cet exemple, le numéro de version est la version de Visual Studio, par exemple 12.0 ou 14.0, la clé {F5E7E71D-1401-11d1-883B-0000F87579D2} est l’identificateur de service (SID) du service, SVsTextManager, et la valeur {F5E7E720-1401-11d1-883B-0000F87579D2} par défaut est le GUID du package du gestionnaire de texte VSPackage, qui fournit le service.

Le service est demandé par type d’interface et non par type de service

Utilisez le type de service et non le type d’interface lorsque vous appelez GetService. Lors de la demande d’un service à partir de Visual Studio, Package extrait le GUID du type . Un service est introuvable si :

  • Un type d’interface est passé à GetService au lieu du type de service.
  • Aucun GUID n’est explicitement affecté à l’interface. Par conséquent, le système crée un GUID par défaut pour un objet en fonction des besoins.

Le VSPackage qui demande le service n’a pas été sitené

Assurez-vous que le VSPackage qui demande le service a été siteé. Visual Studio site un VSPackage après l’avoir construit et avant d’appeler Initialize.

Si vous avez du code dans un constructeur VSPackage qui a besoin d’un service, déplacez-le vers la Initialize méthode .

Le mauvais fournisseur de services est utilisé

Veillez à utiliser le fournisseur de services approprié.

Tous les fournisseurs de services ne se ressemblent pas. Le fournisseur de services que Visual Studio transmet à une fenêtre outil diffère de celui qu’il transmet à un VSPackage. Le fournisseur de services de fenêtre d’outils connaît STrackSelection, mais ne connaît SVsRunningDocumentTablepas . Vous pouvez appeler GetGlobalService pour obtenir un fournisseur de services VSPackage à partir d’une fenêtre d’outil.

Si une fenêtre outil héberge un contrôle utilisateur ou tout autre conteneur de contrôle, le conteneur est siteé par le modèle de composant Windows et n’a accès à aucun service Visual Studio. Vous pouvez appeler GetGlobalService pour obtenir un fournisseur de services VSPackage à partir d’un conteneur de contrôle.

References