代码之家  ›  专栏  ›  技术社区  ›  Brandon Cuff

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

  •  13
  • Brandon Cuff  · 技术社区  · 15 年前

    使用dynamicMethod生成IL时,可以调用方法和访问字段,否则,如果为中的restrictedSkipVisibility参数提供“true”,则这些方法和访问字段将不可访问。 DynamicMethod constructor

    我更喜欢将动态IL发出到动态程序集中,这样我就可以在构建时将生成的IL保存到程序集中。如果使用此方法,则必须使用methodbuilder而不是dynamicmethod。但是,我需要能够跳过可见性检查,这样在运行动态代码时就不会得到methodAccessException。有没有办法,如果有的话怎么办?

    2 回复  |  直到 8 年前
        1
  •  3
  •   Laurent Etiemble    15 年前

    在动态程序集中使用methodbuilder时,将绑定到与编译器生成的程序集相同的规则。因此,程序集之间的可见性由以下内容控制:

    请阅读文档和示例,看看是否适合您的需要。

        2
  •  0
  •   Tony THONG    8 年前

    如果需要按接口而不是委托具体化生成的代码,那么IL对于方法生成器的skipVisibilityCheck很有用。我没有找到直接执行此操作的方法,但您可以使用emitcalli(opcodes.call i…)在MethodBuilder中简单地调用dynamicMethod。