CA2131:安全关键类型不能参与类型等效

类型名

CriticalTypesMustNotParticipateInTypeEquivalence

CheckId

CA2131

类别

Microsoft.Security

是否重大更改

原因

类型参与了类型等价性,类型本身或类型的成员或字段用 SecurityCriticalAttribute 特性标记。

规则说明

对于任何关键的类型或包含参与类型等效的关键方法或字段的类型,将引发此规则。 当 CLR 检测到这样的类型时,它未能在运行时使用 TypeLoadException 加载它。 通常,仅在用户手动实现类型等效而不是通过依赖 tlbimp 和编译器进行类型等效时,才会触发此规则。

如何解决冲突

要修复与该规则的冲突,请删除 SecurityCritical 特性。

何时禁止显示警告

不要禁止显示此规则发出的警告。

示例

下面的示例演示一个接口、一个方法和导致触发此规则的字段。

using System;
using System.Security;
using System.Runtime.InteropServices;

[assembly: SecurityRules(SecurityRuleSet.Level2)]
[assembly: AllowPartiallyTrustedCallers]

namespace TransparencyWarningsDemo
{

    // CA2131 error - critical type participating in equivilance
    [SecurityCritical]
    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ICriticalEquivilentInterface")]
    public interface ICriticalEquivilentInterface
    {
        void Method1();
    }

    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ITransparentEquivilentInterface")]
    public interface ITransparentEquivilentInterface
    {
        // CA2131 error - critical method in a type participating in equivilance
        [SecurityCritical]
        void CriticalMethod();
    }

    [SecurityCritical]
    [TypeIdentifier("3a5b6203-2bf1-4f83-b5b4-1bdc334ad3ea", "ICriticalEquivilentInterface")]
    public struct EquivilentStruct
    {
        // CA2131 error - critical field in a type participating in equivalence
        [SecurityCritical]
        public int CriticalField;
    }
}

请参见

概念

安全透明的代码,级别 2