2015-07-27 1 views
0

Я использую CodeDOM для динамического создания классов. Я указываю выходную сборку, так что .dll создается с именем класса. Однако эти классы необходимо будет обновить с тем же именем класса, поэтому класс будет обновлен, а .dll не будет обновлен (поскольку он не может перезаписать предыдущую .dll). Мне интересно, есть ли способ вызвать метод, который удалит эту .dll, а затем, когда я сгенерирую новый класс, там появится новая .dll. Я знаю, что могу использовать домены приложений, но проблема в том, что мне нужно часто обновлять классы, и я думаю, что производительность сильно пострадает.Есть ли способ удалить DLL-файл без использования отдельных доменов приложений?

+2

Вместо этого используйте Roslyn, чтобы вы могли скомпилировать память. – SLaks

+2

Если вам нужно делать частые обновления, почему вы сохраняете DLL на диск в первую очередь? .NET рад иметь сборку только для памяти для случаев, подобных этому. –

+0

Стоимость appdomain должна быть незначительной по сравнению с затратами на создание кода, его компиляцию и запись DLL на диск. –

ответ

2

Вы можете удалить/воссоздать DLL тогда и только тогда, когда этот DLL-файл в настоящее время не открыт. Он открыт, если один или несколько доменов приложений имеют DLL-код, загруженный в домен.

Невозможно выгрузить DLL из домена приложения. Вы должны выгрузить домен приложения, чтобы выгрузить все DLL-файлы, на которые он ссылается.

UPDATE

Я не знал о способности Рослин, чтобы компилировать в памяти на @SLaks предложение. Если вы не привязаны к физической DLL, посмотрите на this article.

Смежные вопросы