У меня есть сборка .NET DLL, которая создается «на лету» из предварительно скомпилированного кода в базе данных. Есть ли способ создать файл DLL, поместить в него данные, загрузить его с классом Assembly
, а затем, когда процесс завершится, удалите эту DLL?Как вы можете удалить DLL, когда процесс ее владельца завершен?
Мои первые мысли состояли в том, чтобы открыть его с флагом FILE_SHARE_DELETE
, загрузить его с помощью Assembly.LoadFrom,
и удалить его автоматически.
Хотя LoadLibrary открывает файлы с флагом FILE_SHARE_DELETE
, когда DLL по-прежнему отображается в памяти, ОС не удалит файл.
Итак, как удалить DLL, когда процесс завершится без использования AppDomains
или запуск внешнего файла «удалить этот файл после завершения целевого процесса» (DLL-библиотеки .NET, которые загружаются во время выполнения, зависят от ввода пользователем, поэтому это будет связаны с каким-то коммуникационным процессом, чего я бы хотел избежать).