CA2137 : Les méthodes transparentes doivent contenir uniquement des IL vérifiables
TypeName |
TransparentMethodsMustBeVerifiable |
CheckId |
CA2137 |
Catégorie |
Microsoft.Security |
Modification avec rupture |
Oui |
Cause
Une méthode contient du code non vérifiable ou retourne un type par référence.
Description de la règle
Cette règle se déclenche lorsque le code transparent de sécurité tente d'exécuter du code MSIL (Microsoft Intermediate Language) non vérifiable.Toutefois, la règle ne contient pas de vérificateur IL complet, et à la place utilise l'heuristique pour intercepter la plupart des violations de vérification MSIL.
Pour être certain que votre code contient uniquement du code MSIL vérifiable, exécutez Peverify.exe (outil PEVerify) sur votre assembly.Exécutez PEVerify avec l'option /transparent qui limite la sortie uniquement aux méthodes transparentes non vérifiables qui génèrent une erreur.Si l'option /transparent n'est pas utilisée, PEVerify vérifie également des méthodes critiques qui peuvent contenir le code non vérifiable.
Comment corriger les violations
Pour résoudre une violation de cette règle, marquez la méthode avec l'attribut SecurityCriticalAttribute ou SecuritySafeCriticalAttribute ou supprimez le code non vérifiable.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Exemple
La méthode employée dans cet exemple utilise un code non vérifiable et doit être marquée avec l'attribut SecurityCriticalAttribute ou 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;
// }
}
}