TypeBuilder.IsSecurityCritical 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取一个值,该值指示当前类型是安全-关键的还是安全-可靠-关键的,且因此是否可执行关键操作。
public:
virtual property bool IsSecurityCritical { bool get(); };
public override bool IsSecurityCritical { get; }
member this.IsSecurityCritical : bool
Public Overrides ReadOnly Property IsSecurityCritical As Boolean
属性值
如果当前类型是安全-关键的或安全-可靠-关键的,则为 true
;如果它是透明的,则为 false
。
例外
当前动态类型不是通过调用 CreateType() 方法创建的。
注解
IsSecurityCritical、 IsSecuritySafeCritical和 IsSecurityTransparent 属性报告类型的透明度级别,由公共语言运行时 (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>)。 无法通过执行此操作来提升安全级别;也就是说,透明代码不能发出安全关键代码或安全安全关键代码。 属性必须在创建动态程序集时指定,否则在将程序集保存到磁盘并重新加载之前,属性不会生效。
注意
默认继承仅限于运行时对透明度的评估。 没有属性应用于动态程序集。 如果要添加安全属性,则必须自行应用它们。
有关反射发出和透明度的详细信息,请参阅 反射发出中的安全问题。 有关透明度的信息,请参阅 安全更改。