我有一些C#代码(称之为“脚本”), 我正在运行时编译它。它使用我的主程序中的一个接口来访问其函数。一旦编译完成,我就有了CompilerResults.CompiledAssembly
,此时我可以使用CreateInstance(Type)
。
当我使用完脚本后,我想要完全卸载它。据我所知,只有在创建一个单独的应用程序域时才能这样做: 将DLL加载到单独的AppDomain中
我有一些关于我实现的问题:
- 如果我有多个要编译并希望独立卸载的脚本,我是否需要为每个脚本创建单独的应用程序域?
- 我应该使用什么应用程序域名称? GUID是否是一个好主意? 是否有任何可能会冲突的名称应该避免使用?
- 如果程序集在单独的应用程序域中,它访问主程序中的接口是否会有任何问题? 我目前在编译之前执行的是
ReferencedAssemblies.Add(typeof(Interface).Assembly.Location)
。 - 我可以使用
CompilerParameters GenerateInMemory=true
吗,还是必须将其保存在某个地方?