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