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
versuchs mal anders:
Assembly asm = Assembly.LoadFrom(@"path");
Activator.CreateInstance(asm.FullName, asmblyType);
vorausgesetzt du hast keine neue appdomain erstellt!
Wenn ich Assembly.LoadFrom verwende erkennt er beim Vergleich nicht, das mein Plugin das vorgeschriebene Interface verwendet. Gibts da Unterschiede zu Assembly.LoadFile() ?
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
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!