Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Exception beim Nachladen von Modulen per Reflection
d.gierse
myCSharp.de - Member



Dabei seit:
Beiträge: 116

Themenstarter:

Exception beim Nachladen von Modulen per Reflection

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

beantworten | zitieren | melden

Assembly inkl Referenzen dynamisch laden

AppDomain.AssemblyResolve-Ereignis
private Nachricht | Beiträge des Benutzers
brainwave
myCSharp.de - Member

Avatar #avatar-2546.jpg


Dabei seit:
Beiträge: 440

beantworten | zitieren | melden

versuchs mal anders:


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

vorausgesetzt du hast keine neue appdomain erstellt!
private Nachricht | Beiträge des Benutzers
d.gierse
myCSharp.de - Member



Dabei seit:
Beiträge: 116

Themenstarter:

beantworten | zitieren | melden

Wenn ich Assembly.LoadFrom verwende erkennt er beim Vergleich nicht, das mein Plugin das vorgeschriebene Interface verwendet. Gibts da Unterschiede zu Assembly.LoadFile() ?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
d.gierse
myCSharp.de - Member



Dabei seit:
Beiträge: 116

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers