Laden...

Exception beim Nachladen von Modulen per Reflection

Erstellt von d.gierse vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.277 Views
D
d.gierse Themenstarter:in
115 Beiträge seit 2006
vor 12 Jahren
Exception beim Nachladen von Modulen per Reflection

Hallo zusammen,

ich habe in meinem Projekt einen Server, der verschiedene Plugins verarbeiten soll. Für diese Plugins habe ich eine Schnittstelle definiert.

In meinem Server lade ich dann zur Laufzeit zunächst alle dlls im Plugin-Verzeichnis mit Assembly.LoadFile(). Das mache ich, weil die Plugin-Assembly ja wieder von anderen Assemblys abhängen kann.
Nachdem alle dlls geladen wurden versuche ich mit Activator.CreateInstance() eine Instanz des Plugins zu erzeugen. Das bricht aber mit der Exception "Die Datei oder Assembly "xxx" oder eine Abhängigkeit davon wurden nicht gefunden" . Die vermisste dll ist aber vorhanden und wurde aber zuvor bereits geladen.

Wie kann ich den Fehler umgehen?

Gruß Dominik

436 Beiträge seit 2007
vor 12 Jahren

versuchs mal anders:


Assembly asm = Assembly.LoadFrom(@"path");
Activator.CreateInstance(asm.FullName, asmblyType);

vorausgesetzt du hast keine neue appdomain erstellt!

D
d.gierse Themenstarter:in
115 Beiträge seit 2006
vor 12 Jahren

Wenn ich Assembly.LoadFrom verwende erkennt er beim Vergleich nicht, das mein Plugin das vorgeschriebene Interface verwendet. Gibts da Unterschiede zu Assembly.LoadFile() ?

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo d.gierse,

beide Assemblies (Host und Plungin) müssen dasselbe Interface aus derselben gemeinsamen Assembly verwenden. Einfach den Quellcode des Interfaces in beide Assemblies zu kopieren, reicht nicht. Ich tippe, dass die Ursache eher hier liegt.

herbivore

D
d.gierse Themenstarter:in
115 Beiträge seit 2006
vor 12 Jahren

Hallo herbiovore,

ich hatte die Interfaces bereits in eine Assembly ausgelagert. Anscheinend lag es daran, das ich vorher bereits alles dlls einmal geladen habe.
Wenn ich nur die Plugin-Assembly mit LoadFile lade (und nicht alle Assemblys vorher einmal explizit mit LoadFile lade) funktioniert es...

Trotzdem Dank an alle für die Unterstützung!