Compartir a través de


SYSLIB0003: no se admite la seguridad de acceso al código

La seguridad de acceso al código (CAS) es una tecnología heredada no admitida. La infraestructura para habilitar CAS, que solo existe en .NET Framework 2.x - 4.x, está en desuso y no recibe correcciones de mantenimiento o seguridad.

Como resultado, la mayoría de los tipos relacionados con la seguridad de acceso a código (CAS) en .NET están obsoletos, a partir de .NET 5. Esto incluye atributos CAS, como SecurityPermissionAttribute, objetos de permiso CAS, como SocketPermission, tipos derivados de , EvidenceBasey otras API compatibles. El uso de estas API genera una advertencia SYSLIB0003 en tiempo de compilación.

La lista completa de API cas obsoletas es la siguiente:

Soluciones alternativas

  • Si está imponiendo cualquier permiso de seguridad, quite el atributo o la llamada que impone el permiso.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Si va a denegar o restringir cualquier permiso (a través de PermitOnly), póngase en contacto con el asesor de seguridad. Dado que el entorno de ejecución de .NET 5+ no respeta los atributos CAS, la aplicación podría tener un agujero de seguridad si se basa incorrectamente en la infraestructura cas para restringir el acceso a estos métodos.

    // REVIEW the attribute below; could indicate security vulnerability.
    [SecurityPermission(SecurityAction.Deny, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoPermitOnly()
    {
        // REVIEW the line below; could indicate security vulnerability.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).PermitOnly();
    }
    
  • Si está solicitando algún permiso (excepto PrincipalPermission), elimine la solicitud. Todas las demandas se realizarán correctamente en tiempo de ejecución.

    // REMOVE the attribute below; it will always succeed.
    [SecurityPermission(SecurityAction.Demand, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoDemand()
    {
        // REMOVE the line below; it will always succeed.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Demand();
    }
    
  • Si necesita PrincipalPermission, consulte las instrucciones para SYSLIB0002: PrincipalPermissionAttribute está obsoleto. Esa guía se aplica tanto para PrincipalPermission como para PrincipalPermissionAttribute.

Supresión de una advertencia

Si debe usar las API obsoletas, puede suprimir la advertencia en el código o en el archivo del proyecto.

Para suprimir solo una infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la advertencia.

// Disable the warning.
#pragma warning disable SYSLIB0003

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0003

Para suprimir todas las SYSLIB0003 advertencias del proyecto, agregue una <NoWarn> propiedad al archivo del proyecto.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0003</NoWarn>
  </PropertyGroup>
</Project>

Para obtener más información, vea Suprimir advertencias.

Consulte también