CA2133: Delegatów należy powiązać z metodami ze spójną jawnością
TypeName |
DelegatesMustBindWithConsistentTransparency |
CheckId |
CA2133 |
Kategoria |
Microsoft.Security |
Złamanie zmiany |
Złamanie |
[!UWAGA]
Ostrzeżenie to jest stosowane tylko do kodu, który działa CoreCLR (wersja środowiska CLR specyficzne dla aplikacji sieci Web dodatku Silverlight).
Przyczyna
To ostrzeżenie, pożary na metody, która wiąże pełnomocnik oznaczone SecurityCriticalAttribute do metody przezroczyste lub że oznaczone SecuritySafeCriticalAttribute.Ostrzeżenie pożary również metoda, która wiąże pełnomocnika, który jest przezroczysty lub bezpieczne krytycznych metody krytycznych.
Opis reguły
Typów delegatów i metod, które wiążą się z muszą mieć zgodne przezroczystości.Przejrzyste i bezpiecznego krytycznych delegatów tylko może zostać powiązany z innych metod przezroczyste lub bezpieczne krytycznych.Podobnie krytycznych delegatów tylko może powiązać metody krytycznych.Zasady te powiązania upewnij się, że tylko kod, który można wywołać metody za pośrednictwem pełnomocnik może mieć również wywołać tej samej metody bezpośrednio.Na przykład zasady wiążące zapobiec wywołanie kodu krytycznych bezpośrednio poprzez przejrzysty delegata przejrzysty kod.
Jak naprawić naruszenia
Aby usunąć naruszenie tego ostrzeżenia, należy zmienić przejrzystości pełnomocnika lub metody, która wiąże go tak, że przejrzystość dwóch są równoważne.
Kiedy do pomijania ostrzeżenia
Nie pomijaj ostrzeżenie od tej reguły.
Kod
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() { }
}
}