Udostępnij za pośrednictwem


CA2136: Elementy członkowskie nie powinny mieć skonfliktowanych adnotacji przezroczystości

Pozycja Wartość
Ruleid CA2136
Kategoria Microsoft.Security
Zmiana powodująca niezgodność Kluczowa

Przyczyna

Ta reguła jest uruchamiana, gdy element członkowski typu jest oznaczony atrybutem zabezpieczeń System.Security , który ma inną przezroczystość niż atrybut zabezpieczeń kontenera elementu członkowskiego.

Uwaga

Ta reguła została przestarzała. Aby uzyskać więcej informacji, zobacz Przestarzałe reguły.

Opis reguły

Atrybuty przezroczystości są stosowane od elementów kodu o większym zakresie do elementów o mniejszym zakresie. Atrybuty przezroczystości elementów kodu z większym zakresem mają pierwszeństwo przed atrybutami przejrzystości elementów kodu, które są zawarte w pierwszym elemencie. Na przykład klasa oznaczona atrybutem SecurityCriticalAttribute nie może zawierać metody oznaczonej atrybutem SecuritySafeCriticalAttribute .

Jak naprawić naruszenia

Aby naprawić to naruszenie, usuń atrybut zabezpieczeń z elementu kodu, który ma niższy zakres, lub zmień jego atrybut na taki sam jak zawierający element kodu.

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń z tej reguły.

Przykład

W poniższym przykładzie metoda jest oznaczona atrybutem SecuritySafeCriticalAttribute i jest składową klasy oznaczonej atrybutem SecurityCriticalAttribute . Należy usunąć atrybut bezpieczny zabezpieczeń.

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