Laden...

Problem COM-Plugin System mit Assembly.CreateInstance Verweise

Erstellt von LastGentleman vor 15 Jahren Letzter Beitrag vor 15 Jahren 926 Views
LastGentleman Themenstarter:in
1.274 Beiträge seit 2005
vor 15 Jahren
Problem COM-Plugin System mit Assembly.CreateInstance Verweise

Hallo zusammen,

ich hab mir ein DLL erstellt dich von einem anderen Prozess aus aufrufe und die mit Plugin Objekte zurückgibt.

Eigentlich ist der Code relativ einfach


Assembly asm ;
asm = Assembly.LoadFile(AssemblyFileName);
return asm.CreateInstance(ClassName);

Wenn ich nun aber aus meiner Host Umgebung auf das Objekt zugreiffen möchte ist alles, in Ordnung. Wenn aber meine Assembly auf andere Assemblys von mir zugreifen möchten bekomme ich die Fehlermeldung.

Die Datei oder Assembly "AdressTauschContract, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.

Die Datei befindet sich im gleichen Verzeichnis. Das einzige was anders ist ich rufe das ganze über MS Access via COM auf. Ich tippe darauf das es irgendwas mit der AppDomain zu tun hat.

Für Tipps wäre ich sehr dankbar, brüte schon 15 Stunden darüber.

Liebe Grüße aus Österreich
LastGentleman

"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein

4.221 Beiträge seit 2005
vor 15 Jahren

Wenn ich mich nicht irre, dann müsstest Du die abhängigen DLL's auch laden (nicht nur das Top-DLL)...

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo LastGentleman,

für .NET via COM empfehle ich immer die Lösung schön im .NET Rahmen zu bewerkstelligen und erst an eine fertige Lösung auch einen COM-Wrapper dranzubauen.

Der Wrapper macht nichts anderes als Funktionen durchzurouten.

Aus solchen Gründen (wie nun Deine Problematik) heraus bin ich immer besser damit gefahren, als eine Lösung direkt in COM zu verpacken.

Mit dem Wrapper könntest Du auch einen Microkernel mit einsetzen, der Dir Abhängigkeiten eigentlich automatisch nachladen sollte.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

LastGentleman Themenstarter:in
1.274 Beiträge seit 2005
vor 15 Jahren

Hallo ihr beiden,

RECHT LIEBEN DANK.
Hätte nach 17 Stunden schon fast aufgeben. 😉

Wenn man mit komplexeren Programmierung nichts zu tun hat und alles in VBA macht, kennt man solche kniffe nicht.

Für alle die es interessiert und auch mal brauchen könnten Diese Variante **geht doch leider NICHT **
hab die Assembly geladen und die Abhängigkeiten mittels AppDomain.CurrentDomain.Load nachgeladen. Muss halt die Referenzierten Assembly händisch angeben.

Liebe Grüße aus Österreich
Last Gentleman

PS. RainBird hat auch mal so was gemacht, LINK

"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein

LastGentleman Themenstarter:in
1.274 Beiträge seit 2005
vor 15 Jahren

Upps durch einen Programmierfehler bin ich auf die Lösung gekommen.

ich muss meine Assembly in die aktuelle AppDomain reinladen, brauche gar keine anderen Verweise. Ich finde das Verhalten relativ komisch.

Mit Assembly.LoadFromFile geht es nicht, das er sich die Referenzen auflöst, mit AppDomain.CurrentDomain.Load gehts.

Merkwürdig, merkwürdig

Liebe Grüße
LastGentleman

"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein