У меня есть приложение, которое загружает DLL для выполнения определенной части обработки
Example : "Application.dll" loading "Process.dll"
Process.dll динамически загружается в Runtime, используя отражение и не ссылаясь на приложение.
После завершения обработки DLL необходимо перекомпилировать на сервере и снова загрузить обратно.
Чтобы сделать это, мне нужно его освободить, иначе я получаю следующее сообщение:
"Невозможно скопировать файл" Process.dll "в" Process.dll ". Процесс не может получить доступ к файлу" Process.dll ", потому что он используется другим процессом.
Итак, вопрос: как программно освободить/освободить/выгрузить Process.dll
из моего приложения, прежде чем загружать его обратно. Конечно, все дело в том, чтобы сделать это БЕЗ остановки приложения.
РЕДАКТИРОВАТЬ 1:
Предлагаемое решение выглядит следующим образом:
AppDomain newDomain4Process = AppDomain.CreateDomain("newDomain4Process");
Assembly processLibrary = newDomain4Process.Load("Process.dll");
AppDomain.Unload(newDomain4Process);
Проблема, с которой я все еще сталкиваюсь, заключается в том, что, хотя я даю правильный полный путь, я получаю FileNotFound Exception
. Ответ на этот пост также не имел ожидаемого эффекта.
ИЗМЕНИТЬ 2:
Этот пост спас мне жизнь, вот код:
class ProxyDomain : MarshalByRefObject
{
public Assembly GetAssembly(string AssemblyPath)
{
try
{
return Assembly.LoadFrom(AssemblyPath);
}
catch (Exception ex)
{
throw ex;
}
}
}
ProxyDomain pd = new ProxyDomain();
Assembly a = pd.GetAssembly(FullDLLPath);
РЕДАКТИРОВАТЬ 3:
Я не получил доступ к AppDomain и выгрузил его с помощью предыдущего решения.
Когда я использовал классический метод AppDomain Creation, я почувствовал, что Алексей предупреждает: AppDomain.Unload
"казалось" работать, но сборка все еще была загружена (Module View).
Поэтому у меня все еще есть проблема, так как я не могу эффективно выгрузить DLL.