Ein Kunde möchte unsere .NET DLLs von VB6 konsumieren. Sie sind entworfen, um umgekehrte Interop zu unterstützen und alles funktioniert gut ... außer: Es gibt zwei separate VB6-Programme in zwei verschiedenen Verzeichnissen. Es scheint, es notwendig ist, eine von dem zu tun:Wie findet ein COM-Programm eine .NET DLL, die für COM Interop registriert ist?
- Kopieren Sie den .NET-DLL in beiden Verzeichnisse oder
- Installieren Sie den .NET-DLL im GAC
Diese von der Bemerkung des Kunden ist und auch unterstützt durch die RegAsm documentation:
nach einer Baugruppe mit Regasm.exe registrieren, können Sie es in der global Assembly Cache installieren, so dass es kann von jedem COM-Client aktiviert werden. Wenn die Baugruppe nur ist, die von einer einzigen Anwendung aktiviert wird, können Sie in das Verzeichnis dieser Anwendung einfügen.
Ich bin in diesem Punkt verwirrt.
Erster Punkt der Verwirrung:
Soweit ich verstehe, lokalisiert die COM-Laufzeit die DLL die Prog-ID/Class-ID. Wenn ich in der Registrierung auf den Klassen-ID-Eintrag schaue, sehe ich den vollständigen Pfad zur .NET DLL im CodeBase-Schlüssel. Warum findet ein COM-Programm, das die Prog ID/Class ID verwendet, die .NET DLL nicht mithilfe der CodeBase?
Zweiter Punkt der Verwirrung:
Der GAC ist spezifisch für .NET. Wie ist es bei der Auflösung von COM-Referenzen beteiligt?