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

Definition wird nicht gefunden, ist jedoch in der AppDomain gelistet
Stu42
myCSharp.de - Member



Dabei seit:
Beiträge: 506
Herkunft: Aus dem Norden

Themenstarter:

Definition wird nicht gefunden, ist jedoch in der AppDomain gelistet

beantworten | zitieren | melden

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



Dabei seit:
Beiträge: 102
Herkunft: Österreich

beantworten | zitieren | melden

Hallo,

Wie setzt du die Referenz auf den Modul-Typ?

Grüße
private Nachricht | Beiträge des Benutzers
ThomasE.
myCSharp.de - Member



Dabei seit:
Beiträge: 458

beantworten | zitieren | melden

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



Dabei seit:
Beiträge: 247
Herkunft: Esslingen a.N.

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

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



Dabei seit:
Beiträge: 506
Herkunft: Aus dem Norden

Themenstarter:

beantworten | zitieren | melden

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