对于我的一个项目,我需要在运行时生成一些类,我认为使用Reflection.Emit会相当简单,但是当我运行一些调用的生成代码时,我得到了MemberAccessExceptions在发电机组件中标记为内部的方法。有没有办法告诉运行时动态程序集应该能够直接访问我自己的代码?我真的不愿公开这些成员给我的图书馆的消费者。
<小时/> 关于InternalsVisibleTo,我不确定如何在动态生成的程序集中使用它。这甚至可能吗?
答案 0 :(得分:3)
InternalsVisibleTo
通过向其他人开放程序集来工作。因此,如果要从生成的类型中使用程序集Foo
,则必须在AssemblyInfo.cs
中为Foo
指定生成的程序集的名称。
如果使用AssemblyBuilder
类发出新程序集,则可以指定生成的程序集的名称。此名称必须与程序集InternalsVisibleTo
中Foo
属性的名称相匹配。
答案 1 :(得分:0)
我认为产生装配中的成员标记为内部的原因背后有一个原因。
您可以在公共方法中公开必要的功能,或者只剩下两个选择:InternalsVisibleTo(在评论部分中提到的@tuinstoel)或Reflection(使用反射可以访问不同程序集中的非公共成员)。