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