Compartilhar via


CA2137: os métodos transparentes só devem conter IL verificável

TypeName

TransparentMethodsMustBeVerifiable

CheckId

CA2137

Categoria

Microsoft.Security

Alteração Significativa

Quebra

Causa

Um método contém o código verificável ou não retorna um tipo por referência.

Descrição da Regra

Esta regra é acionado nas tentativas do código transparente de segurança de executar MSIL não controlável (linguagem intermediária da Microsoft).Entretanto, a regra não contém um verificador completo de IL, e usa em vez de heurística para capturar a maioria das violações de verificação de MSIL.

Para ter certeza de que contém somente seu código MSIL verificável, execute Peverify.exe (Ferramenta PEVerify) no assembly.PEVerify executar com a opção de /transparent que limita a saída apenas os métodos transparentes não verificávéis que causam um erro.Se a opção /transparent não for usada, PEVerify também verifica se os métodos importantes que são permitidos não conter código verificável.

Como Corrigir Violações

Para corrigir uma violação desta regra, marque o método com o atributo de SecurityCriticalAttribute ou de SecuritySafeCriticalAttribute , remover ou não o código verificável.

Quando Suprimir Alertas

Não elimine um alerta desta regra.

Exemplo

O método neste exemplo usa o código verificável e não deve ser marcado com o atributo de SecurityCriticalAttribute ou de 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; 
    //    }
    }

}