.net CodeDomProvider:是否可以卸载已编译的代码

.net CodeDomProvider:是否可以卸载已编译的代码,.net,.net,我所使用的.NET应用程序允许使用C#脚本扩展其功能,这些脚本被放入配置文件中并按如下方式编译: CodeDomProvider provider; ... var result = provider.CompileAssemblyFromSource(prms, new[] { scriptCode }); var asm = result.CompiledAssembly; var t = asm.GetType("ScriptClass"); var scriptInstance = (I

我所使用的.NET应用程序允许使用C#脚本扩展其功能,这些脚本被放入配置文件中并按如下方式编译:

CodeDomProvider provider;
...
var result = provider.CompileAssemblyFromSource(prms, new[] { scriptCode });
var asm = result.CompiledAssembly;
var t = asm.GetType("ScriptClass");
var scriptInstance = (IScript)Activator.CreateInstance();
我必须允许用户在运行时更改配置文件、捕获此事件并重新编译脚本,而无需重新启动应用程序

我被警告,以前的代码仍将使用内存。我应该如何卸载编译后的代码


提前谢谢你

AFAIK,唯一的方法是将其加载到一个单独的
AppDomain
中,并杀死整个
AppDomain
。我想这意味着将与编译相关的大部分代码也移动到第二个
AppDomain
。然后问题就变成了如何在AppDomain中进行交叉对话;在这里,隐式远程处理是最简单的选择。

因为您必须使用不同的AppDomain,所以您应该查看System.Addin命名空间。它简化了可扩展性。有关SO的完整讨论可在此处查阅:

谢谢@Marc,我将在Tank you@Simon上调查此选项。你指给我的讨论更全面地涵盖了这个问题。