CA2146: tipos devem ser pelo menos críticos como tipos base e interfaces
TypeName |
TypesMustBeAtLeastAsCriticalAsBaseTypes |
CheckId |
CA2146 |
Categoria |
Microsoft.Security |
Alteração Significativa |
Quebra |
Causa
Um tipo transparente é derivado de um tipo que é marcado com SecuritySafeCriticalAttribute ou SecurityCriticalAttribute, ou um tipo que é marcado com o atributo de SecuritySafeCriticalAttribute é derivado de um tipo que é marcado com o atributo de SecurityCriticalAttribute .
Descrição da Regra
Esta regra é disparada quando um tipo derivado tem um atributo de transparência de segurança que não seja tão importante quanto sua tipo de base ou interface implementada.Apenas os tipos críticos podem derivar os tipos de base críticos ou implementar interfaces críticos do, e apenas os tipos críticos ou seguro- críticos podem derivar os tipos de base seguro- críticos ou implementar interfaces seguro- críticos.Violações desta regra no resultado da transparência de nível 2 em TypeLoadException para o tipo derivado.
Como Corrigir Violações
Para corrigir essa violação, marque o tipo derivado ou implementando com um atributo de transparência pelo menos que seja tão importante quanto o tipo de base ou a interface.
Quando Suprimir Alertas
Não elimine um alerta desta regra.
Exemplo
using System;
using System.Security;
namespace TransparencyWarningsDemo
{
[SecuritySafeCritical]
public class SafeCriticalBase
{
}
// CA2156 violation - a transparent type cannot derive from a safe critical type. The fix is any of:
// 1. Make SafeCriticalBase transparent
// 2. Make TransparentFromSafeCritical safe critical
// 3. Make TransparentFromSafeCritical critical
public class TransparentFromSafeCritical : SafeCriticalBase
{
}
[SecurityCritical]
public class CriticalBase
{
}
// CA2156 violation - a transparent type cannot derive from a critical type. The fix is any of:
// 1. Make CriticalBase transparent
// 2. Make TransparentFromCritical critical
public class TransparentFromCritical : CriticalBase
{
}
// CA2156 violation - a safe critical type cannot derive from a critical type. The fix is any of:
// 1. Make CriticalBase transparent
// 2. Make CriticalBase safe critical
// 3. Make SafeCriticalFromCritical critical
[SecuritySafeCritical]
public class SafeCriticalFromCritical : CriticalBase
{
}
}