2

我使用 CSharpCodeProvider 在内存中编译并生成了一个新的命名空间,仅供临时使用。但是这个命名空间应该在一段时间后从内存中删除,以允许下一个生成的代码覆盖所有生成的类和方法的相同标识符。

4

3 回答 3

1

没门。类卸载仅在卸载 AppDomain 时发生 - 注意。

您最好的选择是在子应用程序域中进行所有代码生成(将是相同的过程),但这并非易事(子应用程序域需要通过远程处理所有可访问对象的代理)。

于 2012-12-27T09:42:24.220 回答
1

只有一种方法可以卸载已加载的类型:如果它是可收集程序集的一部分。

但可收集程序集只能通过 Reflection.Emit 创建,而不能通过 CSharpCodeProvider 创建。正因为如此,我不确定使用收藏组件是否适合您。如果没有,您将需要一些其他选项(例如卸载 AppDomains)。

于 2012-12-27T18:59:05.463 回答
0
于 2012-12-28T04:23:54.463 回答