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