Vorgehensweise: Registrieren primärer Interopassemblys
Klassen können nur durch COM-Interop gemarshallt werden und werden immer als Schnittstellen gemarshallt. In einigen Fällen wird die zum Marshallen der Klasse verwendete Schnittstelle als Klassenschnittstelle bezeichnet. Informationen zum Überschreiben der Klassenschnittstelle mit einer beliebigen Schnittstelle finden Sie unter COM Callable Wrapper.
Obwohl jeder Entwickler, der COM-Typen aus einer .NET Framework-Anwendung verwenden möchte, eine interop-Assembly generieren kann, führt dies zu einem Problem. Jedes Mal, wenn ein Entwickler eine COM-Typbibliothek importiert und signiert, erstellt dieser Entwickler einen Satz eindeutiger Typen, die nicht mit denen kompatibel sind, die ein anderer Entwickler importiert und signiert hat. Die Lösung des Typinkompatibilitätsproblems besteht für jeden Entwickler darin, die vom Anbieter bereitgestellte und signierte primäre Interop-Assembly abzurufen.
Wenn Sie Drittanbieter-COM-Typen für andere Anwendungen verfügbar machen möchten, verwenden Sie immer die primäre Interop-Assembly, die von demselben Herausgeber bereitgestellt wird wie die Typbibliothek, die sie definiert. Zusätzlich zur Bereitstellung garantierter Typkompatibilität werden primäre Interop-Assemblys vom Anbieter häufig angepasst, um die Interoperabilität zu verbessern.
Selbst wenn Sie nicht beabsichtigen, die COM-Typen von Drittanbietern verfügbar zu machen, lässt sich durch Verwenden der primären Interop-Assembly das Interoperieren mit COM-Komponenten vereinfachen. Diese Strategie bietet jedoch keinen Schutz vor Änderungen, die ein Anbieter an Typen vornehmen kann, die in einer primären Interop-Assembly definiert sind. Wenn Ihre Anwendung einen solchen Schutz erfordert, generieren Sie Ihre eigene Interop-Assembly, anstatt die primäre Interop-Assembly zu verwenden.
Sie müssen alle erworbenen primären Interop-Assemblys auf dem Entwicklungscomputer registrieren, bevor Sie mit Visual Studio auf sie verweisen können. Visual Studio sucht nach einer primären Interop-Assembly und verwendet diese, wenn Sie zum ersten Mal auf einen Typ aus einer COM-Typbibliothek verweisen. Wenn Visual Studio die der Typbibliothek zugeordnete primäre Interop-Assembly nicht finden kann, werden Sie aufgefordert, diese zu erwerben oder stattdessen eine Interop-Assembly zu erstellen. In gleicher Weise verwendet auch das Type Library Importer-Tool (Tlbimp.exe) die Registrierung, um nach primären Interop-Assemblys zu suchen.
Obwohl eine Registrierung von primären Interop-Assemblys nur dann erforderlich ist, wenn Sie Visual Studio verwenden möchten, bietet eine Registrierung zwei Vorteile:
Eine registrierte primäre Interop-Assembly ist eindeutig unter dem Registrierungsschlüssel der ursprünglichen Typbibliothek gekennzeichnet. Die Registrierung ist die beste Möglichkeit für Sie, nach einer primären Interop-Assembly auf dem Computer zu suchen.
Sie können vermeiden, versehentlich eine neue Interop-Assembly zu generieren und zu verwenden, wenn Sie irgendwann in der Zukunft Visual Studio verwenden, um auf einen Typ zu verweisen, für den Sie eine nicht registrierte primäre Interop-Assembly haben.
Verwenden Sie das Assembly Registration-Tool (Regasm.exe), um eine primäre Interop-Assembly zu registrieren.
So registrieren Sie eine primäre Interop-Assembly
Geben Sie an der Eingabeaufforderung Folgendes ein:
regasm Assemblyname
In diesem Befehl ist assemblyname der Dateiname der Assembly, die registriert wird. "Regasm.exe" fügt einen Eintrag für die primäre Interop-Assembly unter dem Registrierungsschlüssel hinzu, unter dem sich auch der Eintrag der ursprünglichen Typbibliothek befindet.
Beispiel
Im folgenden Beispiel wird die primäre Interop-Assembly CompanyA.UtilLib.dll
registriert.
regasm CompanyA.UtilLib.dll