Поделиться через


Регистрация библиотеки с помощью диспетчера объектов

Средства просмотра символов, такие как представление классов, обозреватель объектов, браузер вызовов и результаты поиска символов, позволяют просматривать символы в проекте или во внешних компонентах. Символы включают пространства имен, классы, интерфейсы, методы и другие элементы языка. Библиотеки отслеживают эти символы и предоставляют их диспетчеру объектов Visual Studio, который заполняет средства данными.

Диспетчер объектов отслеживает все доступные библиотеки. Перед предоставлением символов для инструментов просмотра символов каждая библиотека должна зарегистрироваться в диспетчере объектов.

Как правило, вы регистрируете библиотеку при загрузке VSPackage. Однако это можно сделать в другое время по мере необходимости. Отмена регистрации библиотеки при завершении работы VSPackage.

Чтобы зарегистрировать библиотеку RegisterLibrary , используйте метод. Для управляемой библиотеки кода используйте RegisterSimpleLibrary этот метод.

Чтобы отменить регистрацию библиотеки, используйте UnregisterLibrary этот метод.

Чтобы получить ссылку на диспетчер объектов, IVsObjectManager2передайте SVsObjectManager идентификатор службы методу GetService .

Регистрация и отмена регистрации библиотеки с помощью диспетчера объектов

Регистрация библиотеки в диспетчере объектов

  1. Создайте библиотеку.

    private CallBrowser.Library m_CallBrowserLibrary = null;
    private uint m_nLibraryCookie = 0;
    // Create Library.
    m_CallBrowserLibrary = new CallBrowser.Library();
    
    
  2. Получите ссылку на объект IVsObjectManager2 типа и вызовите RegisterSimpleLibrary метод.

    private void RegisterLibrary()
    {
        if (m_nLibraryCookie != 0)
            throw new Exception("Library already registered with Object Manager");
    
        // Obtain a reference to IVsObjectManager2 type object.
        IVsObjectManager2 objManager =
                          GetService(typeof(SVsObjectManager)) as IVsObjectManager2;
        if (objManager == null)
            throw new NullReferenceException("GetService failed for SVsObjectManager");
    
        try
        {
            int hr =
                objManager.RegisterSimpleLibrary(m_CallBrowserLibrary,
                                                 out m_nLibraryCookie);
                Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hr);
        }
        catch (Exception e)
        {
            // Code to handle any CLS-compliant exception.
            Trace.WriteLine(e.Message);
            throw;
        }
    }
    
    

Отмена регистрации библиотеки с помощью диспетчера объектов

  1. Получите ссылку на объект IVsObjectManager2 типа и вызовите UnregisterLibrary метод.

    private void UnregisterLibrary()
    {
        if (m_nLibraryCookie != 0)
        {
            // Obtain a reference to IVsObjectManager2 type object.
            IVsObjectManager2 objManager = GetService(typeof(SVsObjectManager)) as IVsObjectManager2;
            if (objManager == null)
                throw new NullReferenceException("GetService failed for SVsObjectManager");
    
            try
            {
                objManager.UnregisterLibrary(m_nLibraryCookie);
            }
            catch (Exception e)
            {
                // Code to handle any CLS-compliant exception.
                Trace.WriteLine(e.Message);
                throw;
            }
            finally
            {
                m_nLibraryCookie = 0;
            }
        }
    }