CA2133: Delegaten müssen an Methoden mit konsistenter Transparenz gebunden werden
TypeName |
DelegatesMustBindWithConsistentTransparency |
CheckId |
CA2133 |
Kategorie |
Microsoft.Security |
Unterbrechende Änderung |
Breaking |
Tipp
Diese Warnung wird nur für Code übernommen, in dem die CoreCLR ausgeführt wird (die Version der CLR, die speziell für Silverlight-Webanwendungen verwendet wird).
Ursache
Diese Warnung wird für eine Methode ausgelöst, die einen Delegat, der mit dem SecurityCriticalAttribute-Objekt markiert ist, an eine Methode bindet, die transparent oder mit dem SecuritySafeCriticalAttribute-Objekt markiert ist. Die Warnung wird auch für eine Methode ausgelöst, die einen transparenten oder sicherheitsrelevanten Delegaten an eine wichtige Methode bindet.
Regelbeschreibung
Delegattypen und Methoden, die sie binden, um über konsistente Transparenz zu verfügen. Transparente und sicherheitsgeschützte Delegaten können nur an andere transparente oder sicherheitsgeschützte Methoden gebunden werden. Auf ähnliche Weise dürfen sich wichtige Delegaten nur an wichtige Methoden binden. Diese Bindungsregeln stellen sicher, dass im einzigen Code, in dem eine Methode über einen Delegaten aufgerufen werden kann, die gleiche Methode auch direkt hätte aufgerufen werden können. Bindungsregeln verhindern z. B., dass in transparentem Code wichtiger Code für einen transparenten Delegaten direkt aufgerufen wird.
Behandeln von Verstößen
Um eine Verletzung dieser Warnung zu korrigieren, ändern Sie die Transparenz des Delegaten oder der Methode, die gebunden wird, damit die Transparenz der zwei Objekte übereinstimmt.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Code
using System;
using System.Security;
namespace TransparencyWarningsDemo
{
public delegate void TransparentDelegate();
[SecurityCritical]
public delegate void CriticalDelegate();
public class TransparentType
{
void DelegateBinder()
{
// CA2133 violation - binding a transparent delegate to a critical method
TransparentDelegate td = new TransparentDelegate(CriticalTarget);
// CA2133 violation - binding a critical delegate to a transparent method
CriticalDelegate cd = new CriticalDelegate(TransparentTarget);
}
[SecurityCritical]
void CriticalTarget() { }
void TransparentTarget() { }
}
}