TypeBuilder.IsSecuritySafeCritical 属性

定义

获取一个值,该值指示当前类型是否为安全-可靠-关键,即它是否可执行关键操作且可由透明代码访问。

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

属性值

如果当前类型为安全-可靠-关键,则为 true;如果它为安全-关键或透明,则为 false

例外

当前动态类型不是通过调用 CreateType() 方法创建的。

注解

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

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

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

运行时开始评估程序集的透明度级别。 例如,如果动态程序集是安全关键程序集,则忽略类型上的批注,并且所有类型都是安全关键型的。

默认情况下,动态程序集继承发出它的程序集的透明度。 可以使用 、 AppDomain.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Boolean, IEnumerable<CustomAttributeBuilder>)AppDomain.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean, IEnumerable<CustomAttributeBuilder>) 方法重载并指定安全属性来替代此默认值AppDomain.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>)。 无法通过执行此操作来提升安全级别;也就是说,透明代码不能发出安全关键代码或安全安全关键代码。 必须在创建动态程序集时指定属性,否则属性在将程序集保存到磁盘并重新加载之前不会生效。

注意

默认继承仅限于运行时对透明度的评估。 没有属性应用于动态程序集。 如果要添加安全属性,则必须自行应用它们。

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

适用于

另请参阅