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