Освобождение из памяти кода, сгенерированного CSharpCodeProvider
Я использовал CSharpCodeProvider для компиляции и генерации нового пространства имен в памяти только для временного использования. Но это пространство имен должно быть удалено из памяти после определенного периода времени, чтобы позволить следующему сгенерированному коду переопределить те же идентификаторы всех сгенерированных классов и методов.
3 ответа
Загруженный тип может быть выгружен только одним способом: если он является частью коллекционной сборки.
Но коллекционные сборки могут быть созданы только через Reflection.Emit, а не CSharpCodeProvider. Из-за этого я не уверен, что использование коллекционной сборки является вариантом для вас. Если нет, вам понадобится другой вариант (например, выгрузка доменов приложений).
Ни за что. Выгрузка класса происходит только - внимание - при выгрузке домена приложения.
Лучше всего сделать генерацию кода в дочернем домене приложения (это будет тот же процесс), но это не будет тривиально (дочернему домену приложения нужны прокси-серверы для всего достижимого объекта посредством удаленного взаимодействия).
- Загрузка сгенерированных сборок в дочерний домен приложений
- Чтобы вызвать AppDomain по умолчанию, для междоменной коммутации используйте маршалинг по ссылочным прокси
- Или используйте WCF с привязкой именованных каналов
- Выгрузить дочерний AppDomain