Я подозреваю, что проблема в том, что сборка загружена (в памяти) и имеет открытый выходной файл, так же как и любая другая загружаемая сборка будет иметь дескриптор своего исполняемого файла.также возможно (хотя я считаю маловероятным), что экземпляр dom или экземпляр CompilerResults
имеет ссылку на открытый файл.Также нет IDisposable
, поэтому я подозреваю, что они не держат файл открытым.
Возможные решения:
Вы можете скомпилировать сборку в память.То есть не выводить файл.Это решает насущную проблему.Тем не менее, у вас все еще есть проблема, что скомпилированная сборка остается в памяти.Невозможно выгрузить сборку, не разрушив домен приложения.
Вы можете создать отдельный домен приложения для выполнения компиляции, а затем передать результаты обратно в основной домен приложения.Затем вы можете закрыть домен приложения компилятора, который удалит скомпилированную сборку из памяти, а также освободит все файловые дескрипторы, которые ссылаются на только что созданный файл.Ваша основная программа может затем удалить рассматриваемый файл.