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

标签 .net reflection.emit

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


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

最佳答案

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

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

关于.net - 如何让 Reflection.Emit 程序集访问生成程序集中的内部成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/523329/

相关文章:

.net - SQLite EF6 在运行时以编程方式设置连接字符串

c# - 通过 WebClient C# 从 Google.Drive 下载文件

c# - 如何发出委托(delegate)或 lambda 表达式

c# - 在 C# 中从程序集中提取类

c# - 使用 Reflection.Emit 生成相互引用的类型

c# - 条件分组正在被删除

c# - : SqlCommand. Parameters[string] 或 .Parameters[int] 哪个更快?

mysql - 在 Windows Server 2012 R2 上安装 C++ Redistributable 2015 时出错

c# - Reflection.Emit:如何可靠地将 MethodBuilder 转换为 RuntimeMethodInfo?

.net - 是否可以在将自身指定为泛型类型参数的同时发出从泛型类型派生的类型?