3

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


关于 InternalsVisibleTo,我不确定在动态生成的程序集的情况下如何使用它。这甚至可能吗?

4

2 回答 2

3

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

如果您使用AssemblyBuilder该类发出一个新程序集,您可以指定生成程序集的名称。此名称必须与 assembly 中用于InternalsVisibleTo属性的名称相匹配Foo

于 2009-02-07T14:13:46.700 回答
0

我认为生成程序集中的成员被标记为内部的事实背后是有原因的。

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

于 2009-02-07T09:59:05.747 回答