Как в C# подменить уже подгруженную DLL новой?
Дело вот какое.
К моей программе подгружена DLL, однако в ходе работы программы я формирую динамичный код для этой DLL, после чего она перегенерируется и, по идее, должна снова "подцепиться" к программе. Но этого не происходит, так как моя программа блокирует саму возможность создать новую DLL.
Как отцепить и подцепить обратно?
Конкретней вот так делаю
            var domain = AppDomain.CreateDomain(Path.GetFileName(filename));
            var reader = new FileStream(filename, FileMode.Open, FileAccess.Read);
            var b = new byte[reader.Length];
            reader.Read(b, 0, (int) reader.Length);
            reader.Close();
            var assembly = domain.Load(b);
То есть создаю перед вызовами из библиотеки свой AppDomain, в него подгружаю Dll
Потом выгружаю AppDomain когда заканчиваю с ним работать:
AppDomain.Unload(domain);
Но файл все равно занят процессом, пробил что он любит цепляться к AppDomain.currentDomain при вызове appDomain.Load() на любом другом домене.
Читал советы за юзание CreateInstanceAndUnwrap, но нормально связать c dll нифига не выходит, до утра прямо сидел перебирал разные способы.
В общем пока что сделал так - генерю новые dll с префиксом 'temp-' и случайным GUID'ом. Но они копятся в папке дай бог. Хотя бы перед закрытием программы как-то их удалить :(
Есть предложения?

Принятый ответ

Можно пробовать удалять старые копии при новом запуске программы, а не текущие при закрытии.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.