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