Добавлен Devion
Как в 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 когда заканчиваю с ним работать:
AppDomain.Unload(domain);
Но файл все равно занят процессом, пробил что он любит цепляться к AppDomain.currentDomain при вызове appDomain.Load() на любом другом домене.
Читал советы за юзание CreateInstanceAndUnwrap, но нормально связать c dll нифига не выходит, до утра прямо сидел перебирал разные способы.
В общем пока что сделал так - генерю новые dll с префиксом 'temp-' и случайным GUID'ом. Но они копятся в папке дай бог. Хотя бы перед закрытием программы как-то их удалить :(
Есть предложения?
Принятый ответ
Можно пробовать удалять старые копии при новом запуске программы, а не текущие при закрытии.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
Показать
prog
10 лет
0
Показать
Можно пробовать удалять старые копии при новом запуске программы, а не текущие при закрытии.
Принятый ответ
0
Показать
Devion
10 лет
0
Показать
Ну, это такое, пока что в принципе так и сделаю наверное. Если мне не дадут совет как-таки удалить.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.