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 et solutions courantes lorsque vous ne pouvez pas obtenir de service dans le Kit de développement logiciel (SDK) Visual Studio.

Si le service demandé ne peut pas être obtenu, l’appel à GetService renvoyer null. Testez toujours la valeur Null après avoir demandé 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 déterminer 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, telle que 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 de package du VSPackage du gestionnaire de texte, 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 la place 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.

VsPackage demandant le service n’a pas été sitené

Vérifiez que vsPackage demandant le service a été sitené. 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 fournisseur de services incorrect est utilisé

Veillez à utiliser le fournisseur de services approprié.

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

Si une fenêtre d’outil héberge un contrôle utilisateur ou un autre conteneur de contrôle, le conteneur est siteé par le modèle de composant Windows et n’a pas 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