Compartir a través de


No se puede obtener un servicio en el SDK de Visual Studio

Se aplica a: Visual Studio

En este artículo se presentan las causas comunes y las soluciones cuando no se puede obtener un servicio en el SDK de Visual Studio.

Si no se puede obtener el servicio solicitado, la llamada a GetService devuelve null. Pruebe siempre null después de solicitar un servicio:

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

El servicio no está registrado con Visual Studio

Examine el registro del sistema para ver si el servicio se ha registrado correctamente. Para obtener más información, consulte Cómo: Proporcionar un servicio.

En el ejemplo siguiente .reg fragmento de archivo se muestra cómo se puede registrar el servicio SVsTextManager:

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

En este ejemplo, el número de versión es la versión de Visual Studio, como 12.0 o 14.0, la clave {F5E7E71D-1401-11d1-883B-0000F87579D2} es el identificador de servicio (SID) del servicio, SVsTextManager y el valor {F5E7E720-1401-11d1-883B-0000F87579D2} predeterminado es el GUID del paquete del administrador de texto VSPackage, que proporciona el servicio.

El servicio lo solicita el tipo de interfaz y no por tipo de servicio.

Use el tipo de servicio y no el tipo de interfaz cuando llame a GetService. Al solicitar un servicio desde Visual Studio, Package extrae el GUID del tipo . No se encuentra un servicio si:

  • Se pasa un tipo de interfaz a GetService en lugar del tipo de servicio.
  • No se asigna ningún GUID explícitamente a la interfaz. Por lo tanto, el sistema crea un GUID predeterminado para un objeto según sea necesario.

VsPackage que solicita el servicio no se ha puesto en el sitio

Asegúrese de que el VSPackage que solicita el servicio se ha puesto en el sitio. Visual Studio sitios un VSPackage después de construirlo y antes de llamar a Initialize.

Si tiene código en un constructor VSPackage que necesita un servicio, muévalo al Initialize método .

Se usa el proveedor de servicios incorrecto.

Asegúrese de que usa el proveedor de servicios correcto.

No todos los proveedores de servicios son iguales. El proveedor de servicios que Visual Studio pasa a una ventana de herramientas difiere del que pasa a un VSPackage. El proveedor de servicios de ventana de herramientas conoce STrackSelection, pero no sabe sobre SVsRunningDocumentTable. Puede llamar GetGlobalService a para obtener un proveedor de servicios VSPackage desde una ventana de herramientas.

Si una ventana de herramientas hospeda un control de usuario o cualquier otro contenedor de controles, el modelo de componentes de Windows no tendrá acceso a ningún servicio de Visual Studio. Puede llamar GetGlobalService a para obtener un proveedor de servicios VSPackage desde un contenedor de control.

Referencias