Assembly.ReflectionOnlyLoadFrom funktioniert nicht

8

Ich habe eine Assembly Library1.dll , die einige Interfaces enthält, die als Byte-Array in die Datenbank serialisiert wurden. Aus bestimmten Gründen müssen wir die Eigenschaften und die Definition der Schnittstelle ändern. Jetzt schreibe ich ein Migrationsprogramm. Also habe ich 2 Versionen von Library1.dll , In meinem Dienstprogramm habe ich einen Ordner erstellt, in dem ich die neue Version von Library1.dll ablege. Dieses Dienstprogramm verweist wiederum auch auf Library1.dll , daher enthält es im bin-Ordner Library1.dll , aber diese DLL wird in älteren Versionen kompiliert. Meine neue Version von Library1.dll wird in einem privaten Pfad gespeichert, den ich an Assembly.ReflectionOnlyLoadFrom function zur Instantiierung und damit GetTypes auf der geladenen Assembly weitergebe, was mir weiterhin die Konvertierung von Daten ermöglicht.

Aber ich bekomme immer ReflectionTypeLoadException , wenn ich Library1.dll vom privaten Pfad laden will.

Bitte helft euch !!! jede Hilfe würde geschätzt werden. Ich bin wirklich festgefahren.

Danke, AG

    
netmatrix01 23.02.2010, 20:04
quelle

1 Antwort

16

Wenn Ihre Bibliothek auf eine andere DLL verweist, schlägt GetTypes fehl, wenn sie einen Typ trifft, der einen externen Typ verwendet. Im Gegensatz zum normalen Laden von Baugruppen löst das Laden von ReflectionOnly Assembly keine Abhängigkeiten auf. Sie können entweder AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve abonnieren und die Abhängigkeiten nach Bedarf laden oder sie vorab laden.

Dies ist der Code, den ich dafür verwende:

%Vor%

Dies wird versuchen, alle Abhängigkeiten der reflection-only loaded Assembly zuerst nach fullname, dann nach path zu laden (vorausgesetzt, die Abhängigkeit befindet sich im selben Verzeichnis wie die geladene Assembly).

    
Arne Claassen 24.02.2010 07:44
quelle

Tags und Links