.NET CLR何时评估安全属性?

Bot*_*000 5 .net security clr attributes

我刚刚在关于方法调用的SecurityExceptions的CLI规范中阅读了以下内容:

当CIL转换为本机代码而不是运行时,可能会发生安全检查.

Microsoft的实现如何处理这个问题?

例如,如果只允许某个用户组访问某个类,并且我已为此组安排了安全属性检查.

如果用户运行应用程序,则进行jitted,并且可能在那时执行安全检查而不是在运行时.

如果是这样,抖动是否会缓存本机映像,以便在以后更改用户的组时(例如缓存的本机映像不反映其更新的权限)可能会出现问题?或者除非我预先安装原生图像,否则它每次运行时都会被jitted?我还不太确定原生图像缓存是如何工作的.

adr*_*anm 2

任何抖动图像仅在生成它的同一安全上下文中有效。

这适用于缓存和 ngen:ed 程序集。

一旦加载程序发现当前安全上下文不同,它将加载 IL 映像并 JIT 程序集。

这就是为什么您无法在您的电脑上生成图像并将其分发给其他人的原因。

这也适用于 .Net 核心程序集。它们在安装时被 ngen:ed(或放置在 ngen 队列中)以匹配计算机上的安全上下文。

您可以在这里阅读更多相关信息: msdn ngen.exe