Compartir vía


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

La seguridad de acceso del 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 mantenimiento ni correcciones de seguridad.

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

La lista completa de API de 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 está denegando o restringiendo (mediante PermitOnly) cualquier permiso, póngase en contacto con el asesor de seguridad. Dado que el entorno de ejecución .NET 5 y versiones posteriores no respeta los atributos de CAS, la aplicación puede tener una vulnerabilidad de seguridad si se basa incorrectamente en la infraestructura de 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á pidiendo algún permiso (excepto PrincipalPermission), quite la petición. Todas las peticiones se realizan 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 está pidiendo PrincipalPermission, vea las instrucciones de SYSLIB0002: PrincipalPermissionAttribute está obsoleto. Estas instrucciones se aplican tanto a PrincipalPermission como a PrincipalPermissionAttribute.

Supresión de una advertencia

Si tiene que seguir usando las API obsoletas, puede suprimir la advertencia en el código o en el archivo de proyecto.

Para suprimir solo una infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y luego 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 advertencias SYSLIB0003 del proyecto, agregue una propiedad <NoWarn> 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.

Vea también