使用MethodBuilder生成动态IL时是否可以跳过可见性检查?

时间:2009-09-29 18:20:21

标签: c# cil reflection.emit

使用DynamicMethod生成IL时,如果为DynamicMethod constructor

中的restrictedSkipVisibility参数提供'true',则可以调用方法和访问无法访问的字段

我更愿意将动态IL发送到动态程序集中,这样我就可以在构建时将生成的IL保存到程序集中。如果我使用这种方法,我必须使用MethodBuilder而不是DynamicMethod。但是我需要能够跳过可见性检查,所以当我运行动态代码时,我没有得到MethodAccessException。有没有办法做到这一点,如果是这样的话?

2 个答案:

答案 0 :(得分:3)

将MethodBuilder用于动态程序集时,您将受到与编译器生成的程序集相同的规则的约束。因此,组装间可见性受以下因素控制:

请阅读文档和样本,看看它是否符合您的需求。

答案 1 :(得分:0)

如果您需要通过接口而不是委托来实现生成的代码,那么对于方法构建器来说,il将有用于skipVisibilityCheck。我没有找到直接执行此操作的方法,但您可以使用EmitCalli(OpCodes.Calli ...)在MethodBuilder中简单地调用DynamicMethod。