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()
{
}
}
}