Laden...

Definition wird nicht gefunden, ist jedoch in der AppDomain gelistet

Erstellt von Stu42 vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.264 Views
S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 5 Jahren
Definition wird nicht gefunden, ist jedoch in der AppDomain gelistet

Hallo!

Ich habe eine Applikation welche dynamisch Assemblies zur Laufzeit lädt. Diese "Module-Assemblies" befinden sich im "Modules" Unterordner der Applikation.
Jedes Modul kann dann noch eine GUI-Extension haben, welche sich dann im Unterordnet "GUI" befindet. Ein GUI-Assembly benötigt jedoch Typdefinitonen aus einem Module Assembly.

Das ist eigentlich kein Problem. Das GUI-Assembly hat eine Reference in VisualStudio auf ein "Module"-Assembly und kennt daher die Typen aus diesem zur compile-time. Im GUI-Ordner der Applikation liegen jedoch nicht die Module-Assemblies. Die Module-Assemblies werden von der Applikation jedoch früher geladen, so dass die Definitionen bereits in der AppDomain geladen sind.

Wenn ich nun eine GUI-Dll aus dem Unterordner laden will, welche auf einen Typ verweist der aus einem Modul-Assembly kommt, so kann die GUI-Dll nicht geladen werden weil der Modul-Typ nicht gefunden wird. Im Debugger liefert der Ausdruck "typeof(modul-type)" null zurück. Ich sehe jedoch dass der Typ in der AppDomain gelistet ist.

Warum kann zur Laufzeit ein bestimmter Typ nicht gefunden werden, obwohl er zuvor in die AppDomain geladen wurde?
Was mache ich falsch?

Liebe Grüße, Stu

Y
102 Beiträge seit 2005
vor 5 Jahren

Hallo,

Wie setzt du die Referenz auf den Modul-Typ?

Grüße

T
461 Beiträge seit 2013
vor 5 Jahren

Mit ein wenig Code wäre es leichter...

Zumindest mal die Stelle, die die Assemblies dynamisch lädt.

Und wie soll das funktionieren, wenn du dynamisch dll lädtst und mit typeof zugreifen möchtest? Welchen Typen willst du wie erfahren?

Grüße

Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄

S
248 Beiträge seit 2008
vor 5 Jahren

Hallo Stu42,

wenn der Typ aus dem typeof-Ausdruck nicht gefunden werden kann, dann bekommst du eine FileNotFoundException mit der Information, dass Assembly XYZ, Version=.... oder eine Abhängigkeit davon nicht geladen werden konnte. Er kann also eigentlich nicht null sein. Ist es vielleicht nur ein Anzeigeproblem von Visual-Studio?

Grüße
spooky

1.820 Beiträge seit 2005
vor 5 Jahren

Hallo,

es gibt doch in jeder AppDomain-Instanz ein Event AssemblyResolve. Dieses kannst du abbonieren, und dann bei den gennanten Assemblies den korrekten Verweis zurück geben.

Nobody is perfect. I'm sad, i'm not nobody 🙁

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 5 Jahren

Beispiel-Code ist schwer, weil das über mehrere Projekte geht...
Auf einem anderem Entwicklungsrechner habe ich das Problem nicht und das Assembly wird richtig aufgelöst.

Das mit dem AssemblyResolve ist ein guter tip, da werde ich nochmal schauen.

Danke für eure Antworten.