CA2136: Elementy członkowskie nie powinny mieć skonfliktowanych adnotacji przezroczystości
TypeName |
TransparencyAnnotationsShouldNotConflict |
CheckId |
CA2136 |
Kategoria |
Microsoft.Security |
Złamanie zmiany |
Złamanie |
Przyczyna
Ta reguła pożary, gdy członek typu jest oznaczona z System.Security atrybut zabezpieczeń, który ma inny przejrzystości niż atrybut zabezpieczeń kontenera członka.
Opis reguły
Atrybuty przezroczystości są stosowane od elementów kodu większy zakres elementów mniejszy zakres.Atrybuty przejrzystości elementów kodu z większy zakres mają pierwszeństwo przed przejrzystości atrybutów elementów kodu, które są zawarte w pierwszym elementem.Na przykład klasa, która jest oznaczona z SecurityCriticalAttribute atrybutu nie może zawierać metodę, która jest oznaczona z SecuritySafeCriticalAttribute atrybut.
Jak naprawić naruszenia
Aby naprawić tego naruszenia, usunąć atrybut zabezpieczeń elementu kod, który ma zakres niższy lub zmienić jego atrybut, być taka sama, jak element zawierający kod.
Kiedy do pomijania ostrzeżenia
Nie pomija ostrzeżenia, od tej reguły.
Przykład
W poniższym przykładzie metoda jest oznaczona z SecuritySafeCriticalAttribute atrybutu i jest członkiem klasy, oznaczone SecurityCriticalAttribute atrybut.Bezpieczny atrybut zabezpieczeń, powinny zostać usunięte.
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()
{
}
}
}