Зареждане на DLL за зареждане - .net, dll, зареждане,

Опитвам се да създам .NET клиентски софтуерен пакет, който изтегля компонентите му при поискване.

Да кажем, че имам програма, която е разделена на aглавна изпълнимия файл и 20 други DLL файлове. Основната програма се позовава на 3 от тях, те се позовават на някои други, така или иначе ... те имат някаква структура на дървовидната зависимост.

Това, което се опитвам да постигна, е да разпространявам само главната изпълнима програма и да получавам всичко останало от местоположението на сървъра при поискване.

Нещо като това: Основната програма и всички тези dll проекти са в едно решение и са изградени заедно като всяко друго решение. Докато се разпространява само дистрибуцията на EXE, другите dll (включително някои използвани библиотеки на трети страни) се поставят на разположение за изтегляне на сървър.

В exe работи, показва някои UI, когато потребителят кликнеелемент от менюто, друг прозорец на потребителския интерфейс от един файл DLL е да се показва, така че операционната система търси dll (което не е там), аз се намесвам, изтеглете необходимия DLL от сървъра, сложете го до EXE и оставете ОС я зарежда така, сякаш е там от самото начало.

Това изглежда постижимо чрез използването на общаКлас на интерфейс и някаква магия за размисъл, но се надявах на нещо повече, нещо, което включва изграждането на dll като цяло в едно решение, нещо, което включва изтеглянето по заявка от библиотеки на трети страни.

Някакви идеи как да направите това?

Отговори:

1 за отговор № 1

Търсите AppDomain.AssemblyResolve събитие, която ви позволява да зареждате сборки от персонализираните местоположения.
Няма нужда от друго размишление.


1 за отговор № 2

Предоставете манипулатори за събития за събития AppDomain.ResolveAssembly и AppDomain.ResolveType за текущия ви appdomain и заредете сборките.

Но внимавайте да зареждате групите в правилния контекст: http://msdn.microsoft.com/en-us/library/dd153782.aspx


1 за отговор № 3

Можете да изчакате събитие AssemblyResolve, което се задейства, когато не е намерен асембли, и след това изтеглите сборката, която се опитва да намери.

Трябва да прочетете тази статия.