我正在移植代码,该代码广泛使用DynamicMethod
来允许预编译,以获得更好的冷启动性能。我注意到DynamicMethod
可以被JIT打开并且在跳过可见性检查的情况下执行,这允许它们访问私有嵌套类型,但普通程序集不能(或者不能它们?我没有看到任何明显的加载器选项) 。这个设计决定背后的理由是什么?
答案 0 :(得分:2)
我需要挥动手来回答这个问题,CAS永远是复杂的。 skipVisibility参数与生成在沙箱中执行的代码的可信主机应用程序相关。在这种情况下,由于执行环境错误而在生成方法时执行检查是不合适的。当沙箱内的方法执行时,需要发生这种情况。如果它受到沙箱进行的正常CAS检查。
将参数设置为true实际上添加对ReflectionPermissionFlag.MemberAccess的权限要求,这是获取生成方法所需要的。
颠倒。 this MSDN article,“向沙盒域添加RestrictedMemberAccess”部分提供了一些背景信息。