Share via


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

Articolo Valore
ID regola CA2131
Category Microsoft.Security
Modifica Interruzione

Causa

Un tipo partecipa all'equivalenza del tipo e un tipo stesso, o un membro o un campo del tipo, è contrassegnato con l'attributo SecurityCriticalAttribute .

Nota

Questa regola è stata deprecata. Per altre informazioni, vedere Regole deprecate.

Descrizione 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 un tipo di questo tipo, non riesce a caricarlo con un oggetto TypeLoadException in fase di esecuzione. 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.

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Esempio

Negli esempi seguenti viene illustrata un'interfaccia, un metodo e un campo che causerà l'generazione di 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;
    }
}

Vedi anche

Codice trasparente per la sicurezza, livello 2