Cómo: solucionar problemas de serviciosHow to: Troubleshoot services

Hay varios problemas comunes que pueden producirse al intentar obtener un servicio:There are several common problems that can occur when you try to get a service:

  • El servicio no está registrado con Programa para la mejoraVisual Studio.The service is not registered with Programa para la mejoraVisual Studio.

  • Tipo de interfaz y no por tipo de servicio, se solicita el servicio.The service is requested by interface type and not by service type.

  • El VSPackage que solicita el servicio no que se ha ubicado.The VSPackage requesting the service has not been sited.

  • Se utiliza el proveedor de servicio incorrecto.The wrong service provider is used.

    Si el servicio solicitado no se puede obtener la llamada a GetService devuelve null.If the requested service cannot be obtained, the call to GetService returns null. Siempre debe probar null después de solicitar un servicio:You should always test for null after requesting a service:

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

Para solucionar problemas de un servicioTo troubleshoot a service

  1. Examine el registro del sistema para ver si el servicio se ha registrado correctamente.Examine the system registry to see whether the service has been correctly registered. Para obtener más información, consulte Cómo: proporcionar un servicio.For more information, see How to: Provide a service.

    La siguiente .reg fragmento del archivo muestra cómo se puede registrar el servicio SVsTextManager:The following .reg file fragment shows how the SVsTextManager service might be registered:

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

    En el ejemplo anterior, el número de versión es la versión de Programa para la mejoraVisual 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 de predeterminada {} F5E7E720-1401-11D1-883B-0000F87579D2} es el GUID del Administrador de texto VSPackage, que ofrece el servicio del paquete.In the example above, version number is the version of Programa para la mejoraVisual Studio, such as 12.0 or 14.0, the key {F5E7E71D-1401-11d1-883B-0000F87579D2} is the service identifier (SID) of the service, SVsTextManager, and the default value {F5E7E720-1401-11d1-883B-0000F87579D2} is the package GUID of the text manager VSPackage, which provides the service.

  2. Utilice el tipo de servicio y no el tipo de interfaz al llamar a GetService.Use the service type and not the interface type when you call GetService. Cuando se solicita un servicio de Programa para la mejoraVisual Studio, Package extrae el GUID del tipo.When requesting a service from Programa para la mejoraVisual Studio, Package extracts the GUID from the type. No se encontrará un servicio si se cumplen las condiciones siguientes:A service will not be found if the following conditions exist:

    1. Un tipo de interfaz se pasa a GetService en lugar del tipo de servicio.An interface type is passed to GetService instead of the service type.

    2. Ningún GUID se asigna explícitamente a la interfaz.No GUID is explicitly assigned to the interface. Por lo tanto, el sistema crea una GUID de forma predeterminada para un objeto según sea necesario.Therefore, the system creates a default GUID for an object as needed.

  3. Asegúrese de que se ha ubicado el VSPackage que solicita el servicio.Be sure the VSPackage requesting the service has been sited. Programa para la mejoraVisual Studio Después de crear y antes de llamar a los sitios un VSPackage Initialize.sites a VSPackage after constructing it and before calling Initialize.

    Si tiene código en un constructor de VSPackage que necesita un servicio, se moverá a la Initialize método.If you have code in a VSPackage constructor that needs a service, move it to the Initialize method.

  4. Asegúrese de que está usando el proveedor de servicio correcto.Be sure that you are using the correct service provider.

    No todos los proveedores de servicios son iguales.Not all service providers are alike. El proveedor de servicios que Programa para la mejoraVisual Studio pasa a una ventana de herramientas es diferente al pasa a un VSPackage.The service provider that Programa para la mejoraVisual Studio passes to a tool window differs from the one it passes to a VSPackage. El proveedor de servicios de la ventana de herramienta conoce STrackSelection, pero no conoce SVsRunningDocumentTable.The tool window service provider knows about STrackSelection, but does not know about SVsRunningDocumentTable. Puede llamar a GetGlobalService para obtener un proveedor de servicios de VSPackage desde dentro de una ventana de herramientas.You can call GetGlobalService to get a VSPackage service provider from within a tool window.

    Si una ventana de herramientas hospeda un control de usuario o cualquier otro contenedor de control, el contenedor se sitúa el modelo de componentes de Windows y no tendrá acceso a cualquier Programa para la mejoraVisual Studio servicios.If a tool window hosts a user control or any other control container, the container will be sited by the Windows component model and will not have access to any Programa para la mejoraVisual Studio services. Puede llamar a GetGlobalService para obtener un proveedor de servicios de VSPackage desde dentro de un contenedor de control.You can call GetGlobalService to get a VSPackage service provider from within a control container.

Vea tambiénSee also

Lista de servicios disponibles List of available services
Usar y proporcionan servicios Use and provide services
Conceptos básicos del servicioService essentials