13

使用 DynamicMethod 生成 IL 时,如果在DynamicMethod 构造函数中为 restrictedSkipVisibility 参数提供“true”,则可以调用方法和访问原本无法访问的字段

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

4

2 回答 2

3

在将 MethodBuilder 用于动态程序集时,您必须遵守与编译器生成的程序集相同的规则。因此,组件间可见性受以下因素控制:

请阅读文档和示例,看看它是否能满足您的需求。

于 2009-12-16T09:06:30.137 回答
0

如果您需要通过接口而不是委托来具体化生成的代码,则对于 Methodbuilder 跳过VisibilityCheck 将很有用。我没有找到直接执行此操作的方法,但您可以使用 EmitCalli(OpCodes.Calli...) 在 MethodBuilder 中简单地调用 DynamicMethod。

于 2017-03-24T11:30:35.460 回答