C # выгрузить сборку в AppDomain без использования необработанных байтовых массивов - PullRequest
1 голос
/ 09 июля 2011

Я хотел бы выгрузить пользовательский домен приложений, а затем удалить сборку (с жесткого диска), которая была загружена внутри этого домена приложений. Я нашел много ресурсов, предлагающих загрузить сборку через Assembly.Load (byte []). Это позволяет удалить файл, однако мой код не использует эту загруженную сборку.

В основном у меня есть две сборки: A.dll и B.dll

A.dll ссылается на B.dll и хочет вызвать B.dll.

В моем собственном домене приложений я загружаю как A.dll, так и B.dll через Assembly.LoadFrom. Затем я вызываю метод в A, и он автоматически вызывает загруженный B.

Сложность состоит в том, что в глобальном домене приложений и A, и B уже загружены, однако версия B.dll, загруженная в глобальный домен приложений, отличается от версии, которую я хочу загрузить в пользовательском домене приложений.

Использование метода Assembly.LoadFrom заставляет A вызывать правильную версию B

Использование метода Assembly.Load (byte []) заставляет A вызывать версию B, находящуюся в глобальном домене приложений.

Что мне нужно, так это то, что либо: загрузка A.dll в виде байта [] и B ссылается на него правильно, либо загрузка A.dll с помощью Assembly.LoadFrom, но возможность его удаления после выгрузки домена приложения.

Кто-нибудь знает, как этого добиться?

Спасибо, Christian

1 Ответ

0 голосов
/ 03 июня 2012

Я считаю, что одним из подходов является создание нового домена приложений и использование «теневого копирования» для загрузки сборок в новый домен.Затем вы сможете удалить сборку.

См .: Теневое копирование AppDomain не работает (исходные сборки заблокированы)

...