Предположим, что в .NET(С#) есть следующая ситуация:
namespace MyDll
{
public class MyClass
{
public string GetValue()
{
return "wrong value";
}
}
}
этот код скомпилирован в dll, скажем, MyDll.Dll.
Затем у вас есть приложение MyApplication.exe, которое, используя MyDll.dll в качестве ссылки, создает экземпляр класса MyClass и вызывает метод GetValue:
MyClass instance = new MyClass();
instance.GetValue();
Как только вы поймете, что текущая реализация MyClass.GetValue() неверна, есть ли способ исправить метод MyClass.GetValue(), подобный этому
namespace MyDll
{
public class MyClass
{
public string GetValue()
{
return "correct value";
}
}
}
и HOT заменять полученный файл MyDll.dll без перезагрузки MyApplication.exe
Все решения, предлагаемые в stackoverflow и в google, не работают, потому что даже если MyDll.dll загружается в новый AppDomain, созданный для этой цели, когда я выгружаю вызов
AppDomain.Unload(anoterAppDomainJustForMyDll);
он возвращается без ошибок, но если я попытаюсь перезаписать исходный MyDll.dll с исправленным (пока MyApplication.exe все еще работает), я получаю сообщение об ошибке "невозможно перезаписать, потому что DLL используется другим процессом"....