卸载CodeDom编译的程序集

Nel*_*mel 10 c# assemblies codedom appdomain

我有一些C#代码(让我们称之为"脚本")我在运行时编译.它使用我的主程序中的接口来访问其功能.编译完成后我就CompilerResults.CompiledAssembly可以了CreateInstance(Type).

一旦我完成了使用脚本,我想完全卸载.据我所知,如果我创建一个单独的应用程序域,我只能这样做:将 DLL加载到单独的AppDomain中

我有一些与我的实施有关的问题:

  1. 如果我有多个脚本要编译并想要独立卸载它们,我是否必须为每个脚本创建单独的应用程序域?
  2. 我应该使用哪些应用程序域名?GUID是个好主意吗?有什么名字我应该避免可能会发生冲突吗?
  3. 如果程序集位于单独的应用程序域中,那么访问主程序中的接口是否有任何问题?我ReferencedAssemblies.Add(typeof(Interface).Assembly.Location)在编译之前正在做的事情.
  4. 我可以使用CompilerParameters GenerateInMemory=true,还是必须将其保存在某个地方?

csh*_*net 2

按顺序回答:

  1. 是的,如果您想独立卸载它们,您将需要单独的应用程序域。
  2. 随便用吧。如果您可以将其识别回脚本,它可能会帮助您进行调试,但这对于执行线程来说更是如此。
  3. 只要您将域设置的基本路径设置为您自己的路径即可。

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

  4. 不,您不需要保存它,而且听起来这对您没有好处。