CA2133: os representantes devem ser associados a métodos com transparência consistente
TypeName |
DelegatesMustBindWithConsistentTransparency |
CheckId |
CA2133 |
Categoria |
Microsoft.Security |
Alteração Significativa |
Quebra |
Observação |
---|
Esse aviso é aplicado somente ao código que está executando o CoreCLR (a versão do CLR que é específica para aplicativos Web do Silverlight). |
Causa
Esse aviso é acionado em um método que associa um representante que é marcado com SecurityCriticalAttribute a um método que é transparente ou que é marcado com SecuritySafeCriticalAttribute.O aviso também será acionado um método que associa um delegado que é transparente seguro- crítico ou a um método crítico.
Descrição da Regra
Tipos de delegação e métodos que associam no deve ter transparência consistente.O delega transparentes e seguro- críticos podem ser associado a outros métodos transparentes ou seguro- críticos.Da mesma forma, os representantes críticos podem ser associado aos métodos importantes.Essas regras de associação garantem que o único código que pode invocar um método através de um representante também poderia ter o mesmo método chamado diretamente.Por exemplo, as regras de associação impedir que o código transparente chama o código crítico diretamente por meio de um representante transparente.
Como Corrigir Violações
Para corrigir uma violação desse aviso, alterar a transparência de delegação ou do método que associa de forma que a transparência dos dois for equivalente.
Quando Suprimir Alertas
Não elimine um alerta desta regra.
Código
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() { }
}
}