DynamicMethod.IsSecurityTransparent 属性

定义

获取一个值,该值指示当前的动态方法是否在当前的信任级别是透明的,并因此无法执行关键操作。

public:
 virtual property bool IsSecurityTransparent { bool get(); };
public override bool IsSecurityTransparent { get; }
member this.IsSecurityTransparent : bool
Public Overrides ReadOnly Property IsSecurityTransparent As Boolean

属性值

如果动态方法在当前的信任级为安全透明的,则为 true;否则为 false

例外

动态方法没有方法体。

注解

IsSecurityCriticalIsSecuritySafeCriticalIsSecurityTransparent 属性报告由公共语言运行时 (CLR) 确定的动态方法的透明度级别。 下表显示了这些属性的组合:

安全级别 IsSecurityCritical IsSecurityCritical IsSecurityTransparent
严重 true false false
安全关键 true true false
透明 false false true

使用这些属性比检查程序集及其类型的安全批注、检查当前的信任级别,以及尝试复制运行时的规则要简单得多。

动态方法的透明度取决于它与之关联的模块。 如果动态方法与类型而不是模块相关联,则其透明度取决于包含该类型的模块。 动态方法没有安全注释,因此会为它们分配关联模块的默认透明度。

  • 匿名托管的动态方法始终是透明的,因为系统提供的包含这些方法的模块是透明的。

  • 下表描述了与受信任的程序集关联的动态方法 (即安装在全局程序集缓存) 中的强名称程序集的透明度。

    程序集批注 级别 1 透明度 级别 2 透明度
    完全透明 透明 透明
    完全关键 严重 严重
    混合透明度 透明 透明
    与安全无关 安全-关键 严重

    例如,如果将动态方法与 mscorlib.dll 中的类型关联,该类型具有级别 2 的混合透明度,则动态方法是透明的,并且无法执行关键代码。 有关透明度级别的信息,请参阅 安全透明代码级别 1 和安全 透明代码级别 2

    注意

    将动态方法与与安全无关的受信任级别 1 程序集中的模块相关联(如 System.dll)不允许提升信任。 如果调用动态方法的代码的授权集不包括 System.dll (即完全信任) 的授予集, SecurityException 则在调用动态方法时引发。

  • 与部分受信任的程序集关联的动态方法的透明度取决于程序集的加载方式。 例如,如果程序集以部分信任 (加载到沙盒应用程序域) ,则运行时将忽略程序集的安全注释。 程序集及其所有类型和成员(包括动态方法)被视为透明。 仅当部分信任程序集以完全信任 (加载到桌面应用程序) 的默认应用程序域中时,运行时才会注意安全注释。 在这种情况下,运行时会根据程序集的注释为方法分配动态方法的默认透明度。

有关反射发出和透明度的详细信息,请参阅 反射发出中的安全问题。 有关透明度的信息,请参阅 安全更改

适用于

另请参阅