Dela via


SYSLIB0003: Kodåtkomstsäkerhet stöds inte

Kodåtkomstsäkerhet (CAS) är en äldre teknik som inte stöds. Infrastrukturen för att aktivera CAS, som endast finns i .NET Framework 2.x–4.x, är inaktuell och får inte service- eller säkerhetskorrigeringar.

Därför är de flesta kodåtkomstsäkerhetstyper (CAS)-relaterade typer i .NET föråldrade, med början i .NET 5. Detta inkluderar CAS-attribut, till exempel SecurityPermissionAttribute, CAS-behörighetsobjekt, till exempel SocketPermission, EvidenceBase-härledda typer och andra stödjande API:er. Om du använder dessa API:er genereras en varning SYSLIB0003 vid kompileringstillfället.

Den fullständiga listan över föråldrade CAS-API:er är följande:

Provisoriska lösningar

  • Om du hävdar någon säkerhetsbehörighet tar du bort attributet eller anropet som bekräftar behörigheten.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Om du nekar eller begränsar (via PermitOnly) någon behörighet kontaktar du din säkerhetsrådgivare. Eftersom CAS-attribut inte uppfylls av .NET 5+-körningen kan ditt program ha ett säkerhetshål om det felaktigt förlitar sig på CAS-infrastrukturen för att begränsa åtkomsten till dessa metoder.

    // 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();
    }
    
  • Om du kräver någon behörighet (förutom PrincipalPermission) tar du bort efterfrågan. Alla krav kommer att lyckas vid körning.

    // 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();
    }
    
  • Om du kräver PrincipalPermissionkan du läsa vägledningen för SYSLIB0002: PrincipalPermissionAttribute är föråldrad. Den vägledningen gäller både PrincipalPermission och PrincipalPermissionAttribute.

Ignorera en varning

Om du måste använda föråldrade API:er kan du ignorera varningen i koden eller i projektfilen.

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och återaktiverar sedan varningen.

// Disable the warning.
#pragma warning disable SYSLIB0003

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

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

Om du vill ignorera alla SYSLIB0003 varningar i projektet lägger du till en <NoWarn> egenskap i projektfilen.

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

Mer information finns i Utelämna varningar.

Se även