Partilhar via


Como: solucionar problemas de serviços

Há vários problemas comuns com a obtenção de serviços:

  • O serviço não está registrado com Visual Studio.

  • O serviço é solicitado pelo tipo de interface e não por tipo de serviço.

  • O VSPackage solicitando o serviço não tenha sido localizado.

  • O provedor de serviço incorreto é usado.

Se o serviço solicitado não pode ser obtido, a chamada para GetService retorna null. Você deve sempre testar NULL após solicitar um serviço:

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;

Para solucionar problemas de um serviço

  1. Examine o registro do sistema para ver se o serviço tiver sido registrado corretamente. Para obter mais informações, consulte Registrando serviços.

  2. Use o tipo de serviço e não o tipo de interface quando você chamar GetService. Ao solicitar um serviço da Visual Studio, Package extrai o GUID de tipo. Um serviço não será encontrado se as seguintes condições:

    1. Um tipo de interface é passado para GetService em vez do tipo de serviço.

    2. Nenhuma GUID explicitamente é atribuído à interface. Portanto, o sistema cria um padrão GUID para um objeto, conforme necessário.

  3. Certifique-se de que o VSPackage solicitando o serviço tem sido localizado. Visual StudioDepois de construir a ele e antes de chamar os sites VSPackage Initialize.

    Se você tiver o código em um construtor VSPackage que precisa de um serviço, mova-o para o método Initialize.

  4. Certifique-se de que você está usando o provedor de serviços correto.

    Nem todos os provedores de serviço são iguais. O provedor de serviços que Visual Studio passa para uma janela de ferramenta é diferente daquele que ele passa a um VSPackage. O provedor de serviços da janela de ferramenta sabe sobre STrackSelection, mas não sabe sobre SVsRunningDocumentTable. Você pode chamar GetGlobalService para obter um provedor de serviços de VSPackage dentro de uma janela de ferramenta. Para obter mais informações, consulte Como: usar GetGlobalService.

    Se uma janela de ferramenta hospedar um controle de usuário ou qualquer outro recipiente de controle, o recipiente irá ser localizado pelo modelo de componente do Windows e não terá acesso a qualquer Visual Studio services. Você pode chamar GetGlobalService para obter um provedor de serviços de VSPackage de dentro de um recipiente de controle. Para obter mais informações, consulte Como: usar GetGlobalService.

Consulte também

Conceitos

Lista de serviços disponíveis

Conceitos básicos de serviço

Outros recursos

Serviços