Frage

Ich versuche, ein .NET-Client-Software-Paket, dass Downloads seine Komponenten bei Bedarf zu bauen.

Lassen Sie uns sagen, dass ich ein Programm, das aus einem Haupt ausführbare und 20 andere DLL-Dateien ist. Das Hauptprogramm Referenzen 3 von ihnen, die sie verweisen einige andere, trotzdem ... sie eine Art Baum wie Abhängigkeitsstruktur haben.

Das, was ich zu erreichen versuche, ist nur das Hauptprogramm zu verteilen und alles andere von einem Serverstandort On-Demand erhalten.

So etwas wie folgt aus: Das Hauptprogramm und all diese DLL-Projekte sind in einer einzigen Lösung und werden zusammen wie jede andere Lösung gebaut. Während der Verteilung nur die exe verteilt wird, werden die anderen DLL (einschließlich einigen Bibliotheken von Drittanbietern verwendet werden) in einem Serverstandort zum Download zur Verfügung gestellt.

Die exe ausgeführt wird, zeigt einige UI, wenn der Benutzer einen Menüpunkt klickt, ein anderes UI-Fenster von einem der DLL-Dateien angezeigt werden soll, so dass die OS Looks für die dll (was nicht da ist), ich eingreifen, laden die erforderlich dLL vom Server, legt es neben dem exe und lassen sie die OS Lesen, als ob es war von Anfang an.

Das sieht erreichbar durch die Verwendung einer gemeinsamen Schnittstelle Klasse und einigem Nachdenken Magie, aber ich hatte gehofft, für etwas mehr, etwas, das die DLL beinhaltet den Bau ist insgesamt in einer einzigen Lösung, etwas, das die On-Demand-Bibliotheken Download von 3rd-Party beinhaltet .

Alle Ideen, wie dies zu tun?

War es hilfreich?

Lösung

You're looking for the AppDomain.AssemblyResolve event, which allows you to load assemblies from custom locations.
You won't need any other reflection.

Andere Tipps

Provide event handlers for AppDomain.ResolveAssembly and AppDomain.ResolveType events for your current appdomain and load the assemblies.

But be careful to load the assemblies into the right context: http://msdn.microsoft.com/en-us/library/dd153782.aspx

You can cath the AssemblyResolve event, that fires when an assembly is not found, and then download the assembly it tries to find.

You should read this article.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top