Compartilhar via


SYSLIB0003: não há suporte para a segurança de acesso do código

CAS (segurança de acesso do código) é uma tecnologia herdada sem suporte. A infraestrutura para habilitar a CAS, existente apenas no .NET Framework 2.x – 4.x, foi preterida e não recebe correções de segurança ou de manutenção.

Como resultado, a maioria dos tipos relacionados à CAS (segurança de acesso do código) no .NET estão obsoletos, a partir do .NET 5. Isso inclui atributos de CAS como SecurityPermissionAttribute, objetos de permissão de CAS, como SocketPermission, tipos derivados de EvidenceBase e outras APIs com suporte. O uso dessas APIs gera o aviso SYSLIB0003 no tempo de compilação.

A lista completa de APIs de CAS obsoletas é a seguinte:

Soluções Alternativas

  • Se você estiver declarando qualquer permissão de segurança, remova o atributo ou a chamada que declara a permissão.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Se você estiver negando ou restringindo (por PermitOnly) qualquer permissão, entre em contato com o assistente de segurança. Como os atributos de CAS não são respeitados pelo runtime do .NET 5+, o aplicativo poderá ter uma falha de segurança se depender incorretamente da infraestrutura CAS para restringir o acesso a esses 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();
    }
    
  • Se você estiver exigindo qualquer permissão (exceto PrincipalPermission), remova a demanda. Todas as demandas terão êxito em tempo de execução.

    // 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();
    }
    
  • Se você estiver exigindo PrincipalPermission, consulte as diretrizes para SYSLIB0002: PrincipalPermissionAttribute está obsoleto. Essas diretrizes se aplicam a PrincipalPermission e PrincipalPermissionAttribute.

Suprimir um aviso

Se for necessário usar as APIs obsoletas, você poderá suprimir o aviso no código ou no arquivo de projeto.

Para suprimir apenas uma violação única, adicione as diretivas de pré-processador ao arquivo de origem para desabilitar e, em seguida, reabilite o aviso.

// Disable the warning.
#pragma warning disable SYSLIB0003

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

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

Para suprimir todos os avisos SYSLIB0003 no projeto, adicione uma propriedade <NoWarn> ao arquivo de projeto.

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

Para obter mais informações, confira Suprimir avisos.

Confira também