Освобождение из памяти кода, сгенерированного CSharpCodeProvider

Я использовал CSharpCodeProvider для компиляции и генерации нового пространства имен в памяти только для временного использования. Но это пространство имен должно быть удалено из памяти после определенного периода времени, чтобы позволить следующему сгенерированному коду переопределить те же идентификаторы всех сгенерированных классов и методов.

3 ответа

Решение

Загруженный тип может быть выгружен только одним способом: если он является частью коллекционной сборки.

Но коллекционные сборки могут быть созданы только через Reflection.Emit, а не CSharpCodeProvider. Из-за этого я не уверен, что использование коллекционной сборки является вариантом для вас. Если нет, вам понадобится другой вариант (например, выгрузка доменов приложений).

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

Лучше всего сделать генерацию кода в дочернем домене приложения (это будет тот же процесс), но это не будет тривиально (дочернему домену приложения нужны прокси-серверы для всего достижимого объекта посредством удаленного взаимодействия).

Другие вопросы по тегам