Share via


CA2137: Los métodos transparentes deben contener solo IL que se pueda comprobar

Elemento Valor
RuleId CA2137
Category Microsoft.Security
Cambio importante Problemático

Causa

Un método contiene código que no se puede comprobar o devuelve un tipo por referencia.

Nota

Esta regla está en desuso. Para más información, consulte Reglas en desuso.

Descripción de la regla

Esta regla se desencadena en los intentos del código transparente en seguridad de ejecutar MSIL no comprobable (Lenguaje intermedio de Microsoft). Sin embargo, la regla no contiene un comprobador de IL completo y, en su lugar, utiliza la heurística para detectar la mayoría de las infracciones de comprobación MSIL.

Para asegurarse de que el código solo contiene MSIL verificable, ejecute Peverify.exe (herramienta PEVerify) en el ensamblado. Ejecute PEVerify con la opción /transparent que limita la salida solo a métodos transparentes no verificables, lo que provocaría un error. Si no se usa la opción /transparent, PEVerify también comprueba los métodos críticos que pueden contener código no comprobable.

Cómo corregir infracciones

Para corregir una infracción de esta regla, marque el método con el SecurityCriticalAttribute atributo SecuritySafeCriticalAttribute o quite el código no comprobable.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Ejemplo

El método de este ejemplo usa código no comprobable y debe marcarse con el atributo 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;
    //    }
    }

}