EDIT: Ich habe keine erwähnt wichtige Sache - Anwendung, die meine Assemblys lädt, sind eigentlich nicht im selben Verzeichnis (wie andere DLLs) . Nachdem ich mit dem Fusionsprotokoll herumgespielt hatte, bemerkte ich, dass sich das Laden von dll
anders verhält, als ich bisher dachte. (Yup, ich sollte zuerst RTFM, Schande über mich)Konnte den Typ `A` nicht laden aus der Baugruppe` Not.Containing.Type.A`
C:\Test\appLoadingStuff.exe
C:\Lib\Acme.Application.dll
C:\Lib\Acme.Data.dll
- ...
.NET Base Sondieren Anwendung (außer GAC und Sachen ; Verzeichnis, in dem App geladen wird - C:\Test\
), und kümmert sich nicht um den Speicherort, wo dll
geladen sind (anderes Verzeichnis).
Während das .NET-Framework fand ich mich immer eine ReflectionTypeLoadException
Ausnahme:
System.TypeLoadException
kann nicht eine oder mehrere der angeforderten Typen laden. Rufen Sie die LoaderExceptions-Eigenschaft für weitere Informationen auf.
konnte nicht geladen Typ 'Acme.Data.Foo' aus Assembly 'Acme.Data.Dao, Version = 1.1.0.4, Culture = neutral, PublicKeyToken = null'. ":" Acme.Data.Foo
ich habe, der Einfachheit halber, 3 Baugruppen:
Acme.Application
meine HauptbaugruppeAcme.Data
meine Datenobjekte (durch 1. ein referenzierten)Acme.Data.Dao
objec meine Datenzugriff ts (referenziert von 1.)
Und es gibt eine andere Anwendung, die tatsächlich meine Hauptbaugruppe lädt. Alle .dll
Dateien befinden sich im selben Verzeichnis.
Wie Sie erwarten können, ist der Typ Acme.Data.Foo
in Assemblylebend. Trotzdem versucht .NET, es in einer anderen Assembly zu finden Acme.Data.Dao
- was fehlschlägt, da der Typ nicht da ist.
Ich kann nicht herausfinden, was macht .NET für diesen bestimmten Typ in falscher Montage suchen. Ausnahme wird sofort ausgelöst, wenn Typen auf Montag Zugriff:
System.Reflection.RuntimeAssembly assembly = Assembly.LoadFile("C:\Lib\Acme.Application.dll")
var types = assembly.GetTypes(); // -> explodes
Als ich versuchte, referenzierten Baugruppen zu überprüfen mit:
assembly.GetReferencedAssemblies()
Ich kann meine gewünschte Anordnung in der Liste klar sehen.
Es gibt keine Assembly Redirect (und soweit ich weiß, betrifft dies nur die Version). Versionen von Baugruppen sind korrekt.
Worauf sollte ich noch achten?
Gibt es weitere Details in den 'LoaderExceptions', die von der Ausnahmebedingungsnachricht vorgeschlagen werden, oder ist das die zweite Nachricht im Post? –
@MartinCostello Ja, das ist im Grunde die zweite Nachricht - die nur halb Sinn macht (Typ ist wirklich nicht da, aber Assembly wo Typ ist referenziert also warum es dort sucht) –
Könnte jemand bitte das "Assembly" -Tag entfernen? Ich habe versehentlich meine "Bearbeiten" -Abstimmung bei einer Bearbeitung verschwendet. –