Выгрузить сборку CodeDom
У меня есть код С# (позвольте ему "script" ) Я компилирую во время выполнения. В моей основной программе используется интерфейс, который я использую для доступа к его функциям. Как только компиляция выполнена, у меня есть CompilerResults.CompiledAssembly
, в этом случае я могу CreateInstance(Type)
.
Как только я закончил использовать script, я хотел бы полностью выгрузить. Насколько я понимаю, я могу сделать это только в том случае, если создаю отдельный домен приложения:
Загрузка DLL в отдельный AppDomain
У меня были некоторые вопросы, касающиеся моей реализации:
- Если у меня есть несколько сценариев для компиляции и вы хотите их разгружать самостоятельно, нужно ли создавать отдельные домены приложений для каждого?
- Какие доменные имена приложений я должен использовать? Были бы GUIDs хорошей идеей? Есть ли какие-либо имена, которые я должен избегать, которые могут конфликтовать?
- Если сборка находится в отдельном домене приложения, будут ли у нее какие-либо проблемы с доступом к интерфейсу в основной программе? В настоящее время я делаю
ReferencedAssemblies.Add(typeof(Interface).Assembly.Location)
перед компиляцией.
- Можно ли использовать
CompilerParameters GenerateInMemory=true
, или мне нужно его где-то сохранить?
Ответы
Ответ 1
Ответы в порядке:
- Да, если вы хотите разгрузить их самостоятельно, вам понадобятся отдельные домены приложений.
- Используйте что угодно. Это может помочь вам отладить, если вы можете вернуть его обратно в script, но это будет более верно для исполняемого потока.
-
Пока вы не установили базовый путь настройки домена к своему.
AppDomainSetup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
-
Нет, вам не нужно его сохранять, и не похоже, что это принесет пользу.