형식 라이브러리를 어셈블리로 가져오기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. 결과 어셈블리를 interop 어셈블리라고 하고 포함된 형식 정보를 통해 .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:

  • 디자인 타임 전용 interop 사용: .NET Framework 4.NET Framework 4부터 interop 어셈블리의 형식 정보를 실행 파일에 포함하도록 컴파일러에 지시할 수 있습니다.Using design-time-only interop assemblies: Beginning with the .NET Framework 4.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. Interop 어셈블리를 응용 프로그램에 배포할 필요는 없습니다.You do not have to deploy the interop assembly with your application. 이것이 권장되는 방법입니다.This is the recommended technique.

  • Interop 어셈블리 배포: interop 어셈블리에 대한 표준 참조를 만들 수 있습니다.Deploying interop assemblies: You can create a standard reference to the interop assembly. 이 경우 interop 어셈블리를 응용 프로그램에 배포해야 합니다.In this case, the interop assembly must be deployed with your application. 이 방법을 적용하는데 전용 COM 구성 요소를 사용하지 않을 경우 관리 코드에 통합하려는 COM 구성 요소의 작성자가 게시한 PIA(주 interop 어셈블리)를 항상 참조하세요.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. 주 interop 어셈블리를 생성 및 사용하는 방법에 대한 자세한 내용은 주 Interop 어셈블리를 참조하세요.For more information about producing and using primary interop assemblies, see Primary Interop Assemblies.

디자인 타임 전용 interop 어셈블리를 사용할 경우 COM 구성 요소의 작성자가 게시한 주 interop 어셈블리의 형식 정보를 포함할 수 있습니다.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. 그러나 주 interop 어셈블리를 응용 프로그램에 배포할 필요는 없습니다.However, you do not have to deploy the primary interop assembly with your application.

대부분의 응용 프로그램에서는 COM 구성 요소의 일부 기능을 사용하지 않으므로 디자인 타임 전용 interop 어셈블리를 사용하면 응용 프로그램 크기가 감소합니다.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. 형식 정보가 포함된 응용 프로그램이 이와 같은 다른 응용 프로그램과 상호 작용하거나 주 interop 어셈블리를 사용하는 응용 프로그램과 상호 작용하면 공용 언어 런타임은 형식 동등성 규칙을 사용하여 같은 이름의 두 가지 형식이 동일한 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. 그러나 규칙에 관심이 있다면 형식 동등성 및 포함된 Interop 형식을 참조하세요.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 형식의 구현이 포함된 형식 라이브러리를 찾은 후 다음 옵션을 사용하여 형식 메타데이터가 포함된 interop 어셈블리를 생성합니다.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는 형식 라이브러리의 COM 형식을 어셈블리의 메타데이터로 자동으로 변환합니다.Visual Studio automatically converts COM types in a type library to metadata in an assembly. 자세한 내용은 방법: 형식 라이브러리에 참조 추가연습: Microsoft Office 어셈블리의 형식 정보 포함을 참조하세요.For instructions, see How to: Add References to Type Libraries and Walkthrough: Embedding Type Information from Microsoft Office Assemblies.

  • 형식 라이브러리 가져오기(Tlbimp.exe)Type Library Importer (Tlbimp.exe)

    형식 라이브러리 가져오기는 결과 interop 파일에서 메타데이터를 조정하고, 기존 형식 라이브러리에서 형식을 가져오고, interop 어셈블리 및 네임스페이스를 생성하기 위한 명령줄 옵션을 제공합니다.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. 자세한 내용은 방법: 형식 라이브러리에서 Interop 어셈블리 생성을 참조하세요.For instructions, see How to: Generate Interop Assemblies from Type Libraries.

  • System.Runtime.InteropServices.TypeLibConverter 클래스System.Runtime.InteropServices.TypeLibConverter class

    이 클래스는 형식 라이브러리의 coclass 및 인터페이스를 어셈블리 내의 메타데이터로 변환하기 위한 메서드를 제공합니다.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:

    • 정의되는 coclass 및 인터페이스에 대한 자세한 설명.Precise descriptions of the coclasses and interfaces being defined.

    • 해당하는 .NET Framework 클래스 정의를 생성할 수 있는 컴파일러(예: C# 컴파일러).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 interop 가져오기 프로세스에 대한 자세한 내용은 형식 라이브러리를 어셈블리로 변환 요약을 참조하세요.For more information about the COM interop import process, see Type Library to Assembly Conversion Summary.

참고 항목See Also

TypeLibConverter
.NET Framework에 COM 구성 요소 노출Exposing COM Components to the .NET Framework
형식 라이브러리를 어셈블리로 변환 요약Type Library to Assembly Conversion Summary
Tlbimp.exe(형식 라이브러리 가져오기)Tlbimp.exe (Type Library Importer)
표준 래퍼 사용자 지정Customizing Standard Wrappers
관리 코드에서 COM 형식을 사용 하 여Using COM Types in Managed Code
Interop 프로젝트 컴파일Compiling an Interop Project
Interop 응용 프로그램 배포Deploying an Interop Application
방법: 형식 라이브러리에 참조 추가How to: Add References to Type Libraries
방법: 형식 라이브러리에서 Interop 어셈블리 생성How to: Generate Interop Assemblies from Type Libraries
연습: Microsoft Office 어셈블리의 형식 정보 포함Walkthrough: Embedding Type Information from Microsoft Office Assemblies