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

适用范围:yesVisual Studio noVisual Studio for Mac noVisual Studio Code

“值”
RuleId CA2130
Category 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;
    }
}