CA2136: Member dürfen keine miteinander in Konflikt stehenden Transparenzanmerkungen aufweisen

TypeName

TransparencyAnnotationsShouldNotConflict

CheckId

CA2136

Kategorie (Category)

Microsoft.Security

Unterbrechende Änderung

Breaking

Ursache

Diese Regel wird ausgelöst, wenn ein Typmember mit einem System.Security-Sicherheitsattribut markiert wird, das eine andere Transparenz aufweist als das Sicherheitsattribut eines Containers des Members.

Regelbeschreibung

Transparenzattribute werden von größeren Codeelementen bis hin zu kleineren Elementen übernommen.Die Transparenzattribute von Codeelementen mit größerem Umfang haben Vorrang vor Transparenzattributen von Codeelementen, die im ersten Element enthalten sind.Beispiel: Eine Klasse, die mit dem SecurityCriticalAttribute-Attribut markiert ist, kann keine Methode enthalten, die mit dem SecuritySafeCriticalAttribute-Attribut markiert ist.

Behandeln von Verstößen

Um diese Verletzung zu korrigieren, entfernen Sie das Sicherheitsattribut aus dem Codeelement, das einen niedrigeren Bereich hat, oder ändern Sie das Attribut, damit es mit dem enthaltenden Codeelement übereinstimmt.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

Im folgenden Beispiel wird eine Methode mit dem SecuritySafeCriticalAttribute-Attribut markiert und ist ein Member einer Klasse, die mit dem SecurityCriticalAttribute-Attribut markiert ist.Das sichere Attribut sollte entfernt werden.

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