Importieren einer Typbibliothek als Assembly

Definitionen von COM-Typen befinden sich in der Regel in einer Typbibliothek. Im Gegensatz dazu erzeugen CLS-kompatible Compiler Typmetadaten in einer Assembly. Die zwei Quellen von Typinformationen sind sehr unterschiedlich. In diesem Thema werden Techniken zum Generieren von Metadaten aus einer Typbibliothek beschrieben. Die sich ergebende Assembly wird Interop-Assembly genannt, und die darin enthaltenen Typinformationen erlauben .NET Framework-Anwendungen die Verwendung von COM-Typen.

Es gibt zwei Möglichkeiten, um diese Typinformationen für Ihre Anwendung verfügbar zu machen:

  • Mithilfe der Interopassemblys, die nur zur Entwurfszeit verwendet werden: Ab .NET Framework 4 können Sie den Compiler anweisen, die Typinformationen aus der Interopassembly in die ausführbare Datei einzubetten. Der Compiler bettet nur die Typinformationen ein, die Ihre Anwendung verwendet. Sie müssen die Interop-Assembly nicht mit Ihrer Anwendung bereitstellen. Dies ist das empfohlene Verfahren.

  • Bereitstellen von Interopassemblys: So können Sie einen Standardverweis auf eine Interopassembly erstellen. In diesem Fall muss die Interop-Assembly mit Ihrer Anwendung bereitgestellt werden. Wenn Sie dieses Verfahren ohne eine private COM-Komponente verwenden, verweisen Sie immer auf die primäre Interop-Assembly (PIA), die vom Autor der COM-Komponente veröffentlicht wurde, die Sie in Ihren verwalteten Code einbetten möchten. Weitere Informationen zum Erstellen und Verwenden von primären Interop-Assemblys finden Sie unter Primäre Interop-Assemblys.

Wenn Sie Interop-Assemblys nur zur Entwurfszeit verwenden, können Sie Typinformationen aus der primären Interop-Assembly einbetten, die vom Autor der COM-Komponente veröffentlicht wurden. Sie müssen jedoch die primäre Interop-Assembly nicht mit Ihrer Anwendung bereitstellen.

Das Verwenden von Interop-Assemblys nur zur Entwurfszeit reduziert die Größe Ihrer Anwendung, da die meisten Anwendungen nicht alle Funktionen einer COM-Komponente verwenden. Der Compiler ist sehr effizient, wenn er Typinformationen einbettet. Wenn Ihre Anwendung nur einige der Methoden auf einer COM-Schnittstelle verwendet, bettet der Compiler die nicht verwendeten Methoden nicht ein. Wenn eine Anwendung mit eingebetteten Typinformationen mit einer anderen Anwendung dieser Art oder mit einer Anwendung interagiert, die eine primäre Interop-Assembly verwendet, nutzt die Common Language Runtime Typäquivalenzregeln, um zu bestimmen, ob zwei Typen mit dem gleichen Namen denselben COM-Typ darstellen. Sie müssen diese Regeln nicht kennen, um COM-Objekte zu verwenden. Wenn Sie jedoch an diesen Regeln interessiert sind, finden Sie weitere Informationen unter Type Equivalence and Embedded Interop Types (Typäquivalenz und eingebettete Interop-Typen).

Generieren von Metadaten

Bei COM-Typbibliotheken kann es sich um eigenständige Dateien handeln, die die Erweiterung „.tlb“ (z.B. „Loanlib.tlb“) aufweisen. Einige Typbibliotheken werden im Ressourcenabschnitt einer DLL- oder EXE-Datei eingebettet. Andere Quellen von Typbibliotheksinformationen sind OLB- und OCX-Dateien.

Nachdem Sie die Typbibliothek gesucht haben, die die Implementierung des Ziel-COM-Typs enthält, haben Sie die folgenden Optionen zum Generieren einer Interop-Assembly, die Typmetadaten enthält:

  • Visual Studio

    Visual Studio konvertiert COM-Typen automatisch in einer Typbibliothek in Metadaten in einer Assembly. Anweisungen hierzu finden Sie unter Vorgehensweise: Add References to Type Libraries (Vorgehensweise: Hinzufügen von Verweisen zu Typbibliotheken).

  • Tlbimp.exe (Type Library Importer-Tool)

    Das Type Library Importer-Tool stellt Befehlszeilenoptionen zum Anpassen von Metadaten in der resultierenden Interop-Datei zur Verfügung, importiert Typen aus einer vorhandenen Typbibliothek und generiert eine Interop-Assembly und einen Namespace. Anweisungen hierzu finden Sie unter Vorgehensweise: Generieren von Interopassemblys aus Typbibliotheken.

  • System.Runtime.InteropServices.TypeLibConverter-Klasse

    Diese Klasse stellt Methoden zum Konvertieren von Co-Klassen und Schnittstellen in einer Typbibliothek in Metadaten in einer Assembly bereit. Sie erzeugt dieselbe Metadatenausgabe wie „Tlbimp.exe“. Anders als bei „Tlbimp.exe“, kann die TypeLibConverter-Klasse eine In-Memory-Typbibliothek in Metadaten konvertieren.

  • Benutzerdefinierte Wrapper

    Wenn eine Typbibliothek falsch oder nicht verfügbar ist, ist eine Option das Erstellen einer doppelten Definition der Klasse oder Schnittstelle in verwaltetem Quellcode. Anschließend kompilieren Sie den Quellcode mit einem Compiler, der die Runtime zur Erstellung von Metadaten in einer Assembly anzielt.

    Um COM-Typen manuell zu definieren, benötigen Sie Zugriff auf die folgenden Elemente:

    • Genaue Beschreibungen der Co-Klassen und -Schnittstellen, die definiert werden.

    • Einen Compiler, z.B. den C#-Compiler, der die entsprechenden .NET Framework-Klassendefinitionen generieren kann.

    • Kenntnisse der Konvertierungsregeln einer Typbibliothek in eine Assembly.

    Das Schreiben eines benutzerdefinierten Wrappers ist ein erweitertes Verfahren. Weitere Informationen zum Generieren von benutzerdefinierten Wrappern finden Sie unter Anpassen von Standardwrappern.

Weitere Informationen zum COM-Interop-Importvorgang finden Sie unter Zusammenfassung: Konvertieren einer Typbibliothek in eine Assembly.

Siehe auch