Выгрузить сборку CodeDom - PullRequest
       23

Выгрузить сборку CodeDom

10 голосов
/ 23 сентября 2009

У меня есть некоторый код C # (назовем его «скрипт»), который я компилирую во время выполнения. Он использует интерфейс в моей основной программе, который я использую для доступа к его функциям. После компиляции у меня есть CompilerResults.CompiledAssembly, и в этом случае я могу CreateInstance(Type).

Как только я закончу использовать скрипт, я бы хотел полностью его разгрузить. Из того, что я понимаю, я могу сделать это, только если создаю отдельный домен приложения: Загрузка DLL в отдельный домен приложений

У меня были некоторые вопросы, специфичные для моей реализации:

  1. Если у меня есть несколько сценариев для компиляции и я хочу выгрузить их независимо, нужно ли создавать отдельные домены приложений для каждого?
  2. Какие доменные имена приложений я должен использовать? Будут ли GUID хорошей идеей? Есть ли имена, которых я должен избегать, которые могут конфликтовать?
  3. Если сборка находится в отдельном домене приложения, возникнут ли какие-либо проблемы с доступом к интерфейсу в основной программе? Сейчас я делаю ReferencedAssemblies.Add(typeof(Interface).Assembly.Location) до компиляции.
  4. Могу ли я использовать CompilerParameters GenerateInMemory=true или мне нужно где-то его сохранить?

1 Ответ

2 голосов
/ 23 сентября 2009

Ответы по порядку:

  1. Да, если вы хотите выгружать их независимо, вам понадобятся отдельные домены приложений.
  2. Используйте что угодно. Это может помочь вам в отладке, если вы сможете идентифицировать его обратно в сценарий, но это было бы более верно для исполняющего потока.
  3. Не так долго, пока вы устанавливаете базовый путь настройки домена на свой собственный.

    AppDomainSetup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

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

...