2009-09-29 53 views
12

当使用DynamicMethod的它可以调用方法和访问字段如果您在DynamicMethod constructor使用MethodBuilder生成动态IL时,是否可以跳过可见性检查?

的restrictedSkipVisibility参数提供“真”,这将是其他方式不可访问产生IL我宁愿发出的动态IL成动态组装相反,我可以在生成时将生成的IL保存到程序集中。如果我使用这种方法,我必须使用MethodBuilder而不是DynamicMethod。不过,我需要能够跳过可见性检查,以便在运行动态代码时不会出现MethodAccessException。有没有办法做到这一点,如果是的话如何?

+0

问题解决了吗?你能简单描述一下你是如何解决它的? – kizzx2 2011-05-04 09:49:42

+0

不可以。据我所知,它是不可解的。通过使用Mono.Cecil库重新编写程序集,我最终采用了另一种解决方案。这样我就可以访问私人或内部成员而不违反类型安全规则。但是,用这种方法,我无法使符号与源文件正确匹配,导致其他烦恼。 – 2011-05-10 20:27:20

回答

2

将MethodBuilder应用到动态程序集中时,您将被绑定到与编译器生成的程序集相同的规则。因此,组件间可见性受以下因素支配:

请阅读文档和示例,了解它是否可以满足您的需求。

0

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