C# · 12月 29, 2021

c# – 卸载CodeDom编译汇编

我有一些C#代码(让我们称之为“脚本”)我正在运行时编译.它使用我的主程序中的一个接口来访问它的功能.一旦编译完成,我有CompilerResults.CompiledAssembly,在这种情况下,我可以CreateInstance(Type).

一旦完成使用脚本,我想完全卸载.根据我的理解,如果我创建一个单独的应用程序域,我只能做到这一点:
Loading DLLs into a separate AppDomain

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

>如果我有多个脚本来编译,并且要独立卸载它们,我必须为每个脚本创建单独的应用程序域吗?
>应该使用哪些应用程式的网域名称? GUID是一个好主意吗?有什么名字我应该避免可能会冲突吗?
>如果程序集在一个单独的应用程序域中,访问主程序中的界面是否有任何问题?在编译之前,我正在做ReferencedAssemblies.Add(typeof(Interface).Assembly.Location).
>我可以使用CompilerParameters GenerateInMemory = true,还是要保存在某个地方?

解决方法 答案顺序:

>是的,如果要独立卸载,您需要单独的应用程序域.
>用什么如果您可以将其识别回脚本,那么可能会帮助您进行调试,但是对于执行的线程来说,这将更为真实.
>只要您将域设置的基本路径设置为您自己的基础路径即可.

AppDomainSetup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;>不,你不需要保存它,听起来不会让你受益.