CA2146: Los tipos deben ser al menos tan críticos para la seguridad como sus interfaces y tipos base
Elemento | Valor |
---|---|
RuleId | CA2146 |
Category | Microsoft.Security |
Cambio importante | Problemático |
Causa
Un tipo transparente se deriva de un tipo marcado con el atributo SecuritySafeCriticalAttribute o SecurityCriticalAttribute, o un tipo marcado con el atributo SecuritySafeCriticalAttribute se deriva de un tipo marcado con el atributo SecurityCriticalAttribute.
Nota
Esta regla está en desuso. Para más información, consulte Reglas en desuso.
Descripción de la regla
Esta regla se desencadena cuando un tipo derivado tiene un atributo de transparencia de seguridad que no es tan crítico como su tipo base o interfaz implementada. Solo los tipos críticos pueden derivar de los tipos base críticos o implementar interfaces críticas, y solo los tipos críticos o críticos para la seguridad pueden derivar de tipos base críticos para la seguridad o implementar interfaces críticas para la seguridad. Las infracciones de esta regla en la transparencia de nivel 2 dan como resultado un elemento TypeLoadException para el tipo derivado.
Cómo corregir infracciones
Para corregir esta infracción, marque el tipo derivado o de implementación con un atributo de transparencia que sea al menos tan crítico como el tipo base o la interfaz.
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla.
Ejemplo
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
{
}
}
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de