CA2130:安全关键常量应是透明的

类型名

ConstantsShouldBeTransparent

CheckId

CA2130

类别

Microsoft.Security

是否重大更改

原因

SecurityCriticalAttribute 标记的常数字段或枚举成员。

规则说明

未对常数值实施透明强制,因为编译器内联常数值以便在运行时不需要查找。 常数字段应为安全透明的,以便代码评审阅者不会假定透明代码不能访问常数。

如何解决冲突

要修复与该规则的冲突,请从字段或值中移除 SecurityCritical 特性。

何时禁止显示警告

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

示例

在下面的示例中,枚举值 EnumWithCriticalValues.CriticalEnumValue 和常量 CriticalConstant 引发此警告。 若要修复该问题,删除 [SecurityCritical] 特性,以使其安全透明。

using System;
using System.Security;

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

namespace TransparencyWarningsDemo
{

    public enum EnumWithCriticalValues
    {
        TransparentEnumValue,

        // CA2130 violation
        [SecurityCritical]
        CriticalEnumValue
    }

    public class ClassWithCriticalConstant
    {
        // CA2130 violation
        [SecurityCritical]
        public const int CriticalConstant = 21;
    }
}