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

时间:2010-12-06 07:42:07

标签: .net

我正在研究的.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();

我必须允许用户更改配置文件,捕获此事件并在运行时重新编译脚本,而无需重新启动应用程序。

我警告说以前的代码仍会使用内存。我该如何卸载已编译的代码?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

AFAIK,唯一的方法是将其加载到单独的AppDomain并杀死整个AppDomain。我想这意味着将与编译相关的大部分代码移动到第二个AppDomain。那么问题就变成了如何交叉 - AppDomain;隐含的远程处理是IMO最容易的选择。

答案 1 :(得分:1)

由于您必须使用不同的AppDomain,因此您应该查看System.Addin命名空间。它简化了可扩展性。有关SO的完整讨论,请点击此处:Choosing between MEF and MAF (System.AddIn)