Condividi tramite


CA2131: I tipi SecurityCritical possono non partecipare all'equivalenza del tipo

TypeName

CriticalTypesMustNotParticipateInTypeEquivalence

CheckId

CA2131

Category

Microsoft.Security

Breaking Change

Breaking

Causa

Un tipo partecipa in equivalenza del tipo e il tipo stesso o un membro o un campo del tipo, è contrassegnato dall'attributo SecurityCriticalAttribute.

Descrizione della regola

Questa regola viene attivata su qualsiasi tipo critico o a tipi che contengono metodi o campi critici che partecipano all'equivalenza del tipo.Quando CLR rileva tale tipo, non riesce a caricarlo in fase di esecuzione con un TypeLoadException.In genere, questa regola funziona solo quando gli utenti implementano l'equivalenza del tipo manualmente piuttosto che basarsi su tlbimp e i compilatori per fare l'equivalenza del tipo.

Come correggere le violazioni

Per correggere una violazione di questa regola, rimuovere l'attributo SecurityCritical.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Gli esempi seguenti mostrano un'interfaccia, un metodo e un campo che faranno attivare questa regola.

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;
    }
}

Vedere anche

Concetti

Codice SecurityTransparent, livello 2