.net 为什么只允许动态方法跳过可见性检查?
我正在移植大量使用.net 为什么只允许动态方法跳过可见性检查?,.net,clr,reflection.emit,.net,Clr,Reflection.emit,我正在移植大量使用DynamicMethods的代码,以允许预编译,从而获得更好的冷启动性能。我注意到DynamicMethods可以通过跳过可见性检查进行JIT和执行,这允许它们访问私有嵌套类型,但普通程序集不能(或者不能?我看不到任何明显的加载程序选项)。这个设计决策背后的基本原理是什么?我需要挥手回答这个问题,CAS永远是复杂的。skipVisibility参数与生成在沙箱中执行的代码的受信任主机应用程序相关。在这种情况下,在生成方法时执行检查是不合适的,因为执行环境是错误的。它需要在方法
DynamicMethod
s的代码,以允许预编译,从而获得更好的冷启动性能。我注意到DynamicMethod
s可以通过跳过可见性检查进行JIT和执行,这允许它们访问私有嵌套类型,但普通程序集不能(或者不能?我看不到任何明显的加载程序选项)。这个设计决策背后的基本原理是什么?我需要挥手回答这个问题,CAS永远是复杂的。skipVisibility参数与生成在沙箱中执行的代码的受信任主机应用程序相关。在这种情况下,在生成方法时执行检查是不合适的,因为执行环境是错误的。它需要在方法在沙箱中执行时发生。在沙箱中进行常规CAS检查
将参数设置为true实际上会添加ReflectionPermissionFlag.MemberAccess的权限需求,这是获得生成方法的机会所必需的
乱七八糟的。“向沙盒域添加受限成员访问权限”部分中有一些背景信息。-unity,因为这与Microsoft unity无关。你可能会阅读这篇博文,但确实需要一定的权限才能阅读。因此,如果你想限制这种尝试,你可以。