myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Definition wird nicht gefunden, ist jedoch in der AppDomain gelistet
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Definition wird nicht gefunden, ist jedoch in der AppDomain gelistet

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Stu42 Stu42 ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.10.2006
Beiträge: 502
Entwicklungsumgebung: VS 2005
Herkunft: Aus dem Norden


Stu42 ist offline

Definition wird nicht gefunden, ist jedoch in der AppDomain gelistet

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
11.05.2018 12:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Yeats Yeats ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.11.2005
Beiträge: 95
Entwicklungsumgebung: Visual Studio 2017 Community
Herkunft: Österreich


Yeats ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

Wie setzt du die Referenz auf den Modul-Typ?

Grüße
14.05.2018 11:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ThomasE. ThomasE. ist männlich
myCSharp.de-Mitglied

avatar-178.gif


Dabei seit: 26.11.2013
Beiträge: 446
Entwicklungsumgebung: Visual Studio 2015Pro/2017Ent


ThomasE. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
14.05.2018 14:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Spook Spook ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.10.2008
Beiträge: 210
Entwicklungsumgebung: VS2019
Herkunft: Esslingen a.N.


Spook ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
14.05.2018 15:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
tom-essen tom-essen ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2140.png


Dabei seit: 15.05.2005
Beiträge: 1.815
Entwicklungsumgebung: VS.NET 2013
Herkunft: NRW


tom-essen ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
16.05.2018 10:33 Beiträge des Benutzers | zu Buddylist hinzufügen
Stu42 Stu42 ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.10.2006
Beiträge: 502
Entwicklungsumgebung: VS 2005
Herkunft: Aus dem Norden

Themenstarter Thema begonnen von Stu42

Stu42 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
18.05.2018 10:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Jahre.
Der letzte Beitrag ist älter als 2 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 04.07.2020 20:44