2017-02-20 9 views
1

Ich arbeite an Assembly-Projekt und externes Programm wird durch das Assembly-Programm ausgeführt. System.Environment.CurrentDirectory Assembly und Application.ExecutablePath Pfade sind aufgrund externer Anwendung unterschiedlich. System.Environment.CurrentDirectory ist Montagepfad. Application.ExecutablePath Externer Anwendungspfad. Während der Deserialisierung es expcetion werfenDeserialisierung - Assembly nicht gefunden Problem C#

Montage nicht

gefunden

weil "Application.ExecutablePath " nicht mein dlls mit. Also ich möchte ändern System.Environment.CurrentDirectory Pfad für Deserialisierung.

+1

Ich denke, Sie sollten es so machen http://StackOverflow.com/Questions/19398748/Adding-References-dynamically-in-net –

+0

Während deserilzation es Ausnahme Assembly nicht gefunden, da externe Anwendung "revit.exe" Ordner gefunden nicht meine DLLs.aber wenn ich meine DLLs in diesen Ordner kopieren, funktioniert das gut. –

+0

Gemäß diesem Beispiel könnten Sie einfach Pfade zu Ihrer Assembly codieren und sie würden laden, ohne dass sie sich im selben Ordner befinden wie Ihre exe. –

Antwort

3

Ich empfehle, ein AssemblyResolve-Ereignis für die aktuelle Domäne einzurichten. Auf diese Weise können Sie explizit bestimmen, wo sich Ihre DLLs befinden und sie laden, wenn sie nicht automatisch gefunden werden.

Jeremy Tammik schrieb darüber hier: http://thebuildingcoder.typepad.com/blog/2014/05/rvtva3c-assembly-resolver.html

Das einzige, was von vorsichtig zu sein, ist, dass Sie sicher, dass speziell für Ihre DLLs (keine DLLs) sucht das Ereignis machen sollte - und dass, wenn es nicht angemessen Wenn Sie eine DLL laden, geben Sie null zurück (ich komme gelegentlich in Szenarien vor, in denen die Addins anderer Leute das nicht gut implementieren, und es vermasselt mein Addin, wenn ich es tue).

Verwandte Themen