Поделиться через


CA2136: элементы не должны иметь конфликтующие пометки прозрачности

TypeName

TransparencyAnnotationsShouldNotConflict

CheckId

CA2136

Категория

Microsoft.Security

Критическое изменение

Критическое изменение

Причина

Это правило срабатывает, когда член типа помечается атрибутом безопасности System.Security с прозрачностью, отличной от прозрачности атрибута безопасности контейнера элемента.

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

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

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

Чтобы устранить это нарушение, удалите атрибут безопасности из элемента кода c меньшей областью или измените его атрибут таким образом, чтобы он был таким же, как и элемент кода, который его содержит.

Отключение предупреждений

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

Пример

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

using System;
using System.Security;

namespace TransparencyWarningsDemo
{

    [SecurityCritical]
    public class CriticalClass
    {
        // CA2136 violation - this method is not really safe critical, since the larger scoped type annotation
        // has precidence over the smaller scoped method annotation.  This can be fixed by removing the
        // SecuritySafeCritical attribute on this method
        [SecuritySafeCritical]
        public void SafeCriticalMethod()
        {
        }
    }
}