CodeDomProvider provider;
...
var result = provider.CompileAssemblyFromSource(prms, new[] { scriptCode });
var asm = result.CompiledAssembly;
var t = asm.GetType("ScriptClass");
var scriptInstance = (IScript)Activator.CreateInstance();
我必须允许用户更改配置文件,捕获此事件并在运行时重新编译脚本,而无需重新启动应用程序。
我警告说以前的代码仍会使用内存。我该如何卸载已编译的代码?
提前谢谢!
答案 0 :(得分:1)
AFAIK,唯一的方法是将其加载到单独的AppDomain
并杀死整个AppDomain
。我想这意味着将与编译相关的大部分代码移动到第二个AppDomain
。那么问题就变成了如何交叉 - AppDomain
;隐含的远程处理是IMO最容易的选择。
答案 1 :(得分:1)
由于您必须使用不同的AppDomain,因此您应该查看System.Addin命名空间。它简化了可扩展性。有关SO的完整讨论,请点击此处:Choosing between MEF and MAF (System.AddIn)