【发布时间】:2009-09-29 18:20:21
【问题描述】:
使用 DynamicMethod 生成 IL 时,如果您在 DynamicMethod constructor 中为受限的SkipVisibility 参数提供“true”,则可以调用方法和访问原本无法访问的字段
我更愿意将动态 IL 发送到动态程序集中,这样我就可以在构建时将生成的 IL 保存到程序集中。如果我使用这种方法,我必须使用 MethodBuilder 而不是 DynamicMethod。但是,我需要能够跳过可见性检查,以便在运行动态代码时不会得到 MethodAccessException。有没有办法做到这一点,如果有怎么办?
【问题讨论】:
-
这个问题解决了吗?您能简要描述一下您是如何解决的吗?
-
没有。据我所知,这是无法解决的。我最终通过使用 Mono.Cecil 库重新编写程序集来采用另一种解决方案。这样我就可以在不违反类型安全规则的情况下访问私有或内部成员。但是,使用这种方法,我无法让符号正确匹配到导致其他烦恼的源文件。
标签: c# cil reflection.emit