Импорт библиотеки типов в виде сборки

Определения COM-типов обычно хранятся в библиотеке типов. С другой стороны, CLS-совместимые компиляторы создают в сборке метаданные типов. Эти два источника сведений о типах заметно отличаются. В этом разделе описываются способы создания метаданных из библиотеки типов. Результирующая сборка и называется сборкой взаимодействия, а содержащиеся в ней сведения о типах позволяют приложениям .NET Framework использовать COM-типы.

Существует два способа, чтобы сделать эти сведения о типах доступными для приложения.

  • Используя сборки взаимодействия только во время разработки: начиная с платформа .NET Framework 4, компилятор может внедрить сведения о типе из сборки взаимодействия в исполняемый файл. Компилятор внедряет только сведения о типе, используемые приложением. Не требуется развертывать сборку взаимодействия с приложением. Рекомендуем использовать этот метод.

  • Развертывание сборок взаимодействия. Можно создать стандартную ссылку на сборку взаимодействия. В этом случае сборки взаимодействия должны быть развернуты вместе с приложением. Если вы применяете эту методику и не используете частный COM-компонент, всегда ссылайтесь на основную сборку взаимодействия (PIA), опубликованную автором COM-компонента, который планируется включить в управляемый код. Дополнительные сведения о создании и использовании основных сборок взаимодействия см. в разделе Основные сборки взаимодействия.

При использовании сборок взаимодействия только во время разработки можно внедрить сведения о типе из основной сборки взаимодействия, опубликованной автором COM-компонента. Однако не требуется развертывать основную сборку взаимодействия с приложением.

Использование сборок взаимодействия только во время разработки приводит к уменьшению размера приложения, так как большинство приложений используют не все функции COM-компонента. Компилятор очень эффективен при внедрении сведений о типе. Если приложение использует только некоторые методы в COM-интерфейсе, компилятор не внедряет неиспользуемые методы. Когда приложение, содержащее внедренные сведения о типах, взаимодействует с другим таким приложением или с приложением, использующим основную сборку взаимодействия, среда CLR применяет правила эквивалентности типов, чтобы определить, представляют ли два типа с одинаковым именем один и тот же COM-тип. Чтобы использовать COM-объекты, знать эти правила не требуется. Однако если вас интересуют правила, см. раздел Эквивалентность типов и внедренные типы взаимодействия.

Создание метаданных

Библиотеки COM-типов могут быть автономными файлами TLB, например Loanlib.tlb. Некоторые библиотеки типов встроены в раздел ресурсов файла DLL или EXE. Другими источниками данных библиотек типов являются файлы OLB и OCX.

После нахождения библиотеки типов, содержащей реализацию искомого COM-типа, для создания сборки взаимодействия, содержащей метаданные типа, разработчик может выбрать нужный из нескольких вариантов.

  • Visual Studio

    Visual Studio 2005 автоматически преобразует COM-типы библиотеки типов в метаданные сборки. Инструкции см. в разделе "Практическое руководство. Добавление ссылок на библиотеки типов".

  • Программа импорта библиотек типов (Tlbimp.exe)

    Программа экспорта библиотек типов предоставляет параметры командной строки для настройки метаданных в результирующем файле взаимодействия, импортирует типы из существующей библиотеки типов и создает сборку взаимодействия и пространство имен. Инструкции см. в разделе Практическое руководство. Создание сборок взаимодействия из библиотек типов.

  • Класс System.Runtime.InteropServices.TypeLibConverter

    Этот класс предоставляет методы преобразования компонентных классов и интерфейсов в библиотеке типов в метаданные сборки. Он создает такие же выходные метаданные, что и программа Tlbimp.exe. Однако, в отличие от программы Tlbimp.exe, класс TypeLibConverter может преобразовать в метаданные библиотеку типов, находящуюся в памяти.

  • Настраиваемые оболочки

    Если библиотека типов недоступна или является неверной, единственный выход — создать в управляемом исходном коде дубликат определения класса или интерфейса. После этого нужно скомпилировать исходный код с помощью компилятора, который обращается к среде выполнения, чтобы создать метаданные в сборке.

    Чтобы определить COM-типы вручную, необходим доступ к следующим элементам:

    • точные описания определяемых компонентных классов и интерфейсов;

    • компилятор, например компилятор C#, который может создавать соответствующие определения классов .NET Framework;

    • ведения о правилах преобразования библиотек типов в сборки.

    Написание настраиваемой оболочки — это сложная процедура. Дополнительные сведения о создании настраиваемой оболочки см. в разделе Настройка стандартных оболочек.

Дополнительные сведения процессе импорта COM-взаимодействия см. в разделе Обзор преобразования библиотек типов в сборки.

См. также