如何让Reflection.Emit程序集访问生成程序集中的内部成员?

时间:2009-02-07 06:51:09

标签: .net reflection.emit

对于我的一个项目,我需要在运行时生成一些类,我认为使用Reflection.Emit会相当简单,但是当我运行一些调用的生成代码时,我得到了MemberAccessExceptions在发电机组件中标记为内部的方法。有没有办法告诉运行时动态程序集应该能够直接访问我自己的代码?我真的不愿公开这些成员给我的图书馆的消费者。

<小时/> 关于InternalsVisibleTo,我不确定如何在动态生成的程序集中使用它。这甚至可能吗?

2 个答案:

答案 0 :(得分:3)

InternalsVisibleTo通过向其他人开放程序集来工作。因此,如果要从生成的类型中使用程序集Foo,则必须在AssemblyInfo.cs中为Foo指定生成的程序集的名称。

如果使用AssemblyBuilder类发出新程序集,则可以指定生成的程序集的名称。此名称必须与程序集InternalsVisibleToFoo属性的名称相匹配。

答案 1 :(得分:0)

我认为产生装配中的成员标记为内部的原因背后有一个原因。

您可以在公共方法中公开必要的功能,或者只剩下两个选择:InternalsVisibleTo(在评论部分中提到的@tuinstoel)或Reflection(使用反射可以访问不同程序集中的非公共成员)。