我使用 CSharpCodeProvider 在内存中编译并生成了一个新的命名空间,仅供临时使用。但是这个命名空间应该在一段时间后从内存中删除,以允许下一个生成的代码覆盖所有生成的类和方法的相同标识符。
问问题
701 次
3 回答
1
没门。类卸载仅在卸载 AppDomain 时发生 - 注意。
您最好的选择是在子应用程序域中进行所有代码生成(将是相同的过程),但这并非易事(子应用程序域需要通过远程处理所有可访问对象的代理)。
于 2012-12-27T09:42:24.220 回答
1
只有一种方法可以卸载已加载的类型:如果它是可收集程序集的一部分。
但可收集程序集只能通过 Reflection.Emit 创建,而不能通过 CSharpCodeProvider 创建。正因为如此,我不确定使用收藏组件是否适合您。如果没有,您将需要一些其他选项(例如卸载 AppDomains)。
于 2012-12-27T18:59:05.463 回答
0
- 将生成的程序集加载到子 AppDomain
- 要调用默认 AppDomain,对于跨域交换,请使用由引用代理编组的
- 或者将 WCF 与命名管道绑定一起使用
- 卸载子 AppDomain
于 2012-12-28T04:23:54.463 回答