Повторный запуск сборки Resolve? - PullRequest
1 голос
/ 14 марта 2011

Я запускаю AssemblyResolve, устанавливая «Копировать локальный» определенной DLL на false.Мой AssemblyResolve запускается, и я могу выбрать местоположение моей DLL.

Позже в коде я хочу, чтобы AssemblyResolve повторно инициировал триггер, чтобы я мог указать новое расположение DLL, но, поскольку DLL из первого AssemblyResolve была успешно загружена, я не могу перезагрузить новую DLL.*

Есть ли способ очистить текущую DLL и перезагрузить ее?Или что-то подобное ???

Спасибо!

Ответы [ 3 ]

4 голосов
/ 15 марта 2011

Вы должны использовать Assembly.LoadFile () для этого. Вы не можете сделать это с AssemblyResolve, CLR очень тщательно избегает повторной загрузки сборок, так как это откроет дверь для смешивания различных версий одного и того же класса. Некоторые методы сопоставлены с одной версией, некоторые - с другой. Без какого-либо способа гарантировать, что веселье наступает.

LoadFile (), однако, пистолет, который стреляет в вашу ногу и взрывает вам лицо очень творческим и трудным для диагностики способом. Одна радость в том, что один и тот же тип несовместим при двойной загрузке. Тебе лучше переосмыслить это.

0 голосов
/ 13 мая 2014

попробуй так:

string dllFile = "C:\\sample.dll";
Assembly asmLoader = Assembly.LoadFile(dllFile);
Type[] types = asmLoader.GetTypes();

Поскольку все ресурсы из сборки не могут быть перезагружены / заменены, пока приложение все еще находится в режиме @ runtime используйте LoadFile ().

0 голосов
/ 14 марта 2011

Как вы можете себе представить, чтобы сделать это в работающей программе?и что более важно почему?Сборка представляет собой рабочую версию некоторого исполняемого кода.Почему вы хотите иметь альтернативные реалии в то же время выполнения.Я не вижу цели, и это, вероятно, указывает на некоторый недостаток дизайна?Вы можете уйти от создания отдельного ApplicationDomain в коде и снова загрузить свое приложение с любыми сборками, которые вы хотите ... но почему?

...