Выгрузить сборку 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;

  • Нет, вам не нужно его сохранять, и не похоже, что это принесет пользу.