Laden...

Assembly.LoadFrom lädt die (vermeintlich) falsche Dll

Erstellt von Crone vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.031 Views
C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 9 Jahren
Assembly.LoadFrom lädt die (vermeintlich) falsche Dll

Hallo zusammen,

ich bin auf ein komisches Problem gestoßen welches vermutlich ein bug im debugger oder Framework ... oder ich bin vollkommen blind 😃

Ich möchte mehrere DLL's aus einem Verzeichnis laden (alle unterschiedlich aber von der selben Basis Klasse UND Interface abgeleitet)

Wenn ich nun folgenden Code ausführe wird bei LoadFrom(Pfad) die falsche DLL geladen trotz eindeutiger Pfad-Angabe.

        private void LoadDll(string dllpath)
        {
            try
            {
                Assembly assembly = Assembly.LoadFrom(dllpath);
                Type[] types = assembly.GetTypes(); //hier kommt immer das selbe raus
                foreach (Type type in types)
	            {
                            //IBase baseInterface = assembly.CreateInstance(type.FullName) as IBase;
                            object data = assembly.CreateInstance(type.FullName);
                            IBase baseInterface = data as IBase;//gibt null zurück warum auch immer...
}

ich hab im Ordner z.b

InfoCollector.dll
a.dll
b.dll

für jede Datei ruf ich die Funktion LoadDll auf mit den entsprechenden Pfad als parameter

in der Variable assembly wird auch die richtige assembly geladen,** solang es keine DLL ist die von dem Interface und der Basis Klasse Ableitet... ist es jedoch eine so wird immer die zuerst geladene DLL in dem Fall InfoCollector.dll geladen**

Ich hab leider absolut keine Ahnung mehr woran das liegen könnte bzw. wie ich das Problem beseitige.

Desweiteren kann ich das geladene object wenn ich eine Instanz der Assembly erstelle nicht ins Interface Konvertieren. (es wird null zurückgegeben)

In meinem Test Projekt wo sich alle Klassen in einer Datei (2 Namespaces) befanden hat das Konvertieren super geklappt. Mit Ausnahme das sich alles in einer Datei befand (kein laden einer dll notwendig) hat sich bei der Konvertierung nichts geändert.

Ich hoffe jemand von euch hat eine Idee dazu, Danke.

Gruß
Crone

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 9 Jahren

na wer hat sich den sowas ausgedacht 😃

Vielen Danke, funktioniert nun wie gewünscht.

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

M
171 Beiträge seit 2012
vor 9 Jahren

Desweiteren kann ich das geladene object wenn ich eine Instanz der Assembly erstelle nicht ins Interface Konvertieren. (es wird null zurückgegeben)

Die Interfaces müssen natürlich sowohl der ladenden Anwendung als auch der DLL bekannt sein. Einfach ein gleichnamiges Interface auf beiden Seiten zu erstellen funktioniert nicht, da dies unterschiedliche Typen sind.