CA2137: прозрачные методы должны содержать только проверяемые IL

Товар Значение
Идентификатор правила CA2137
Категория Microsoft.Security
Критическое изменение Критическое

Причина

Метод содержит непроверяемый код или возвращает тип по ссылке.

Примечание.

Это правило устарело. Дополнительные сведения см. в разделе "Устаревшие правила".

Описание правила

Это правило срабатывает при попытках прозрачного кода безопасности выполнить непроверяемый MSIL. Однако это правило не содержит полную проверку IL, и вместо нее использует эвристику для выявления большинства нарушений проверки MSIL.

Чтобы убедиться, что код содержит только проверяемую MSIL, запустите Peverify.exe (средство PEVerify) в сборке. Запустите PEVerify с параметром /transparent , который ограничивает выходные данные только непроверяемыми прозрачными методами, что приведет к ошибке. Если параметр /transparent не используется, PEVerify также проверяет критические методы, которые могут содержать неподключаемый код.

Устранение нарушений

Чтобы устранить нарушение этого правила, пометьте метод с SecurityCriticalAttribute помощью атрибута или SecuritySafeCriticalAttribute удалите неподключаемый код.

Когда лучше отключить предупреждения

Для этого правила отключать вывод предупреждений не следует.

Пример

Метод в этом примере использует неподключаемый код и должен быть отмечен атрибутом или SecuritySafeCriticalAttribute атрибутомSecurityCriticalAttribute.

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

}