Share via


CA2137: I metodi Transparent devono contenere solo IL verificabile

Articolo Valore
ID regola CA2137
Category Microsoft.Security
Modifica Interruzione

Causa

Un metodo contiene codice non verificabile o restituisce un tipo tramite riferimento.

Nota

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

Descrizione regola

Questa regola viene attivata sui tentativi tramite codice trasparente per la sicurezza per eseguire MSIL (Microsoft Intermediate Language) non verificabile. Tuttavia, la regola non contiene un verificatore di IL completo, ma usa invece regole euristiche per intercettare la maggior parte delle violazioni di verifica MSIL.

Per essere certi che il codice contenga solo MSIL verificabile, eseguire Peverify.exe (PEVerify Tool) nell'assembly. Eseguire PEVerify con l'opzione /transparent che limita l'output solo ai metodi trasparenti non verificabili che causano un errore. Se l'opzione /transparent non viene usata, PEVerify verifica anche i metodi critici che possono contenere codice non verificabile.

Come correggere le violazioni

Per correggere una violazione di questa regola, contrassegnare il metodo con l'attributo SecurityCriticalAttribute o SecuritySafeCriticalAttribute o o rimuovere il codice non verificabile.

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Esempio

Il metodo in questo esempio usa codice non verificabile e deve essere contrassegnato con l'attributo SecurityCriticalAttribute o SecuritySafeCriticalAttribute .

using System;
using System.Security;


namespace TransparencyWarningsDemo
{

    public class UnverifiableMethodClass
    {
        // CA2137 violation - transparent method with unverifiable code.  This method should become critical or
        // safe critical 
    //    public unsafe byte[] UnverifiableMethod(int length)
    //    {
    //        byte[] bytes = new byte[length];
    //        fixed (byte* pb = bytes)
    //        {
    //            *pb = (byte)length;
    //        }

    //        return bytes;
    //    }
    }

}