ReflectionOnlyLoad可以垃圾收集吗?

时间:2012-06-21 15:58:13

标签: c# .net reflection dynamic

我想“热”将一些预打包的组件加载到一个单独的AppDomain中,然而事情是我不知道入口点类的名称甚至是汇编文件。我需要找到这个入口点,以便我可以运行一些初始化例程。

所以我打算做的是在所有文件上运行ReflectionOnlyLoad并找到遵循某个约定的文件,即。注释/实现某个界面等。

问题是,如果我一遍又一遍地从主AppDomain运行ReflectionOnlyLoad,我会开始泄漏内存吗?如果这不能从主应用程序域运行,我的选项是什么,因为我再也不知道入口点在哪里。

此外,还有任何关于使用ReflectionOnlyLoad的细微之处的其他信息。

3 个答案:

答案 0 :(得分:3)

我推荐Mono.Cecil。这是一个可以在.net上使用的简单程序集(它不需要Mono运行时)。它提供了一个API来将程序集作为数据加载,并且运行良好。我发现API很容易使用,并且它在使用仅反射加载时遇到的任何问题都没有。

您还可以使用CCI,这是MS提供的一个开源项目,它提供了一个汇编阅读器。

另请参阅:CCI vs. Mono.Cecil -- advantages and disadvantages

答案 1 :(得分:1)

ReflectionOnlyLoad无法解决您的问题,请参阅docs

为什么不执行在新AppDomain中查找入口点等的代码?

答案 2 :(得分:0)

无法通过dll反映出来。即使只有反射加载,该类型仍然适用于主AppDomain。

2解决方案:

  1. 将入口点放在某处的xml中并解析它。
  2. 使用 2阶段AppDomain,一个用于反射器,另一个用于反射器 实际对象。
  3. 我选择了(1),因为它是最明智的。

    (2)我必须通过2个单独的代理才能向实际的远程对象发出命令,或者我需要比我喜欢的更紧密地耦合接口。更不用说是代码的痛苦。