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