Eine nette Ansatz, den ich verwendet habe, in letzter Zeit ist ein Ereignishandler für die AssemblyResolve Veranstaltung AppDomain hinzuzufügen.
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
Dann in der Methode Ereignishandler können Sie die Assembly laden, die eine der Assembly.Load, Assembly.LoadFrom Überschreibungen verwendet werden wurde versucht, aufgelöst und aus dem Verfahren zurück.
EDIT:
Basierend auf Ihren zusätzliche Informationen, die ich die Technik, die oben denke, mit, insbesondere die Hinweise auf eine Anordnung Lösung selbst ist der einzige wirkliche Ansatz, der ohne Umstrukturierung des App funktionieren wird. Was es Ihnen gibt ist, dass der Speicherort jeder Assembly, die die CLR nicht auflösen kann, durch den Code zur Laufzeit ermittelt und geladen werden kann ... Ich habe dies in ähnlichen Situationen sowohl für steckbare Architekturen als auch für eine Assemblierungsreferenzintegrität verwendet Scan-Werkzeug.
Ein gutes Beispiel für diese Technik ist die Anwendung LINQPad. Es wird als einzelne exe ausgeliefert, daher sind alle Bibliotheken als eingebettete Ressourcen enthalten. Siehe http://www.albahari.com/nutshell/ch16.aspx für Code und http://www.linqpad.net/HowLINQPadWorks.aspx für Einblicke. – Pat