Импорт библиотеки типов в виде сборкиImporting a Type Library as an Assembly

Определения COM-типов обычно хранятся в библиотеке типов.COM type definitions usually reside in a type library. С другой стороны, CLS-совместимые компиляторы создают в сборке метаданные типов.In contrast, CLS-compliant compilers produce type metadata in an assembly. Эти два источника сведений о типах заметно отличаются.The two sources of type information are quite different. В этом разделе описываются способы создания метаданных из библиотеки типов.This topic describes techniques for generating metadata from a type library. Результирующая сборка и называется сборкой взаимодействия, а содержащиеся в ней сведения о типах позволяют приложениям .NET Framework использовать COM-типы.The resulting assembly is called an interop assembly, and the type information it contains enables .NET Framework applications to use COM types.

Существует два способа, чтобы сделать эти сведения о типах доступными для приложения.There are two ways to make this type information available to your application:

  • Использование сборок взаимодействия только во время разработки. Начиная с версии .NET Framework 4, можно указать компилятору внедрять сведения о типах из сборки взаимодействия в исполняемый файл.Using design-time-only interop assemblies: Beginning with the .NET Framework 4, you can instruct the compiler to embed type information from the interop assembly into your executable. Компилятор внедряет только сведения о типе, используемые приложением.The compiler embeds only the type information that your application uses. Не требуется развертывать сборку взаимодействия с приложением.You do not have to deploy the interop assembly with your application. Это рекомендуемая методика.This is the recommended technique.

  • Развертывание сборок взаимодействия. Можно создать стандартную ссылку на сборку взаимодействия.Deploying interop assemblies: You can create a standard reference to the interop assembly. В этом случае сборки взаимодействия должны быть развернуты вместе с приложением.In this case, the interop assembly must be deployed with your application. Если вы применяете эту методику и не используете частный COM-компонент, всегда ссылайтесь на основную сборку взаимодействия (PIA), опубликованную автором COM-компонента, который планируется включить в управляемый код.If you employ this technique, and you are not using a private COM component, always reference the primary interop assembly (PIA) published by the author of the COM component you intend to incorporate in your managed code. Дополнительные сведения о создании и использовании основных сборок взаимодействия см. в разделе Основные сборки взаимодействия.For more information about producing and using primary interop assemblies, see Primary Interop Assemblies.

При использовании сборок взаимодействия только во время разработки можно внедрить сведения о типе из основной сборки взаимодействия, опубликованной автором COM-компонента.When you use design-time-only interop assemblies, you can embed type information from the primary interop assembly published by the author of the COM component. Однако не требуется развертывать основную сборку взаимодействия с приложением.However, you do not have to deploy the primary interop assembly with your application.

Использование сборок взаимодействия только во время разработки приводит к уменьшению размера приложения, так как большинство приложений используют не все функции COM-компонента.Using design-time-only interop assemblies reduces the size of your application, because most applications do not use all the features of a COM component. Компилятор очень эффективен при внедрении сведений о типе. Если приложение использует только некоторые методы в COM-интерфейсе, компилятор не внедряет неиспользуемые методы.The compiler is very efficient when it embeds type information; if your application uses only some of the methods on a COM interface, the compiler does not embed the unused methods. Когда приложение, содержащее внедренные сведения о типах, взаимодействует с другим таким приложением или с приложением, использующим основную сборку взаимодействия, среда CLR применяет правила эквивалентности типов, чтобы определить, представляют ли два типа с одинаковым именем один и тот же COM-тип.When an application that has embedded type information interacts with another such application, or interacts with an application that uses a primary interop assembly, the common language runtime uses type equivalence rules to determine whether two types with the same name represent the same COM type. Чтобы использовать COM-объекты, знать эти правила не требуется.You do not have to know these rules to use COM objects. Однако если вас интересуют правила, см. раздел Эквивалентность типов и внедренные типы взаимодействия.However, if you are interested in the rules, see Type Equivalence and Embedded Interop Types.

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

Библиотеки COM-типов могут быть автономными файлами TLB, например Loanlib.tlb.COM type libraries can be stand-alone files that have a .tlb extension, such as Loanlib.tlb. Некоторые библиотеки типов встроены в раздел ресурсов файла DLL или EXE.Some type libraries are embedded in the resource section of a .dll or .exe file. Другими источниками данных библиотек типов являются файлы OLB и OCX.Other sources of type library information are .olb and .ocx files.

После нахождения библиотеки типов, содержащей реализацию искомого COM-типа, для создания сборки взаимодействия, содержащей метаданные типа, разработчик может выбрать нужный из нескольких вариантов.After you locate the type library that contains the implementation of your target COM type, you have the following options for generating an interop assembly containing type metadata:

  • Visual StudioVisual Studio

    Visual Studio 2005 автоматически преобразует COM-типы библиотеки типов в метаданные сборки.Visual Studio automatically converts COM types in a type library to metadata in an assembly. Инструкции см. в разделе Практическое руководство. Добавление ссылок на библиотеки типов.For instructions, see How to: Add References to Type Libraries.

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

    Программа экспорта библиотек типов предоставляет параметры командной строки для настройки метаданных в результирующем файле взаимодействия, импортирует типы из существующей библиотеки типов и создает сборку взаимодействия и пространство имен.The Type Library Importer provides command-line options to adjust metadata in the resulting interop file, imports types from an existing type library, and generates an interop assembly and a namespace. Инструкции см. в разделе Практическое руководство. Создание сборок взаимодействия из библиотек типов.For instructions, see How to: Generate Interop Assemblies from Type Libraries.

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

    Этот класс предоставляет методы преобразования компонентных классов и интерфейсов в библиотеке типов в метаданные сборки.This class provides methods to convert coclasses and interfaces in a type library to metadata within an assembly. Он создает такие же выходные метаданные, что и программа Tlbimp.exe.It produces the same metadata output as Tlbimp.exe. Однако, в отличие от программы Tlbimp.exe, класс TypeLibConverter может преобразовать в метаданные библиотеку типов, находящуюся в памяти.However, unlike Tlbimp.exe, the TypeLibConverter class can convert an in-memory type library to metadata.

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

    Если библиотека типов недоступна или является неверной, единственный выход — создать в управляемом исходном коде дубликат определения класса или интерфейса.When a type library is unavailable or incorrect, one option is to create a duplicate definition of the class or interface in managed source code. После этого нужно скомпилировать исходный код с помощью компилятора, который обращается к среде выполнения, чтобы создать метаданные в сборке.You then compile the source code with a compiler that targets the runtime to produce metadata in an assembly.

    Чтобы определить COM-типы вручную, необходим доступ к следующим элементам:To define COM types manually, you must have access to the following items:

    • точные описания определяемых компонентных классов и интерфейсов;Precise descriptions of the coclasses and interfaces being defined.

    • компилятор, например компилятор C#, который может создавать соответствующие определения классов .NET Framework;A compiler, such as the C# compiler, that can generate the appropriate .NET Framework class definitions.

    • ведения о правилах преобразования библиотек типов в сборки.Knowledge of the type library-to-assembly conversion rules.

    Написание настраиваемой оболочки — это сложная процедура.Writing a custom wrapper is an advanced technique. Дополнительные сведения о создании настраиваемой оболочки см. в разделе Настройка стандартных оболочек.For additional information about how to generate a custom wrapper, see Customizing Standard Wrappers.

Дополнительные сведения процессе импорта COM-взаимодействия см. в разделе Обзор преобразования библиотек типов в сборки.For more information about the COM interop import process, see Type Library to Assembly Conversion Summary.

См. такжеSee also