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