Delen via


SYSLIB0004: De functie voor beperkte uitvoeringsregio (CER) wordt niet ondersteund

De functie Beperkte uitvoeringsregio's (CER) wordt alleen ondersteund in .NET Framework. Daarom worden verschillende CER-gerelateerde API's gemarkeerd als verouderd, te beginnen in .NET 5. Met deze API's genereert u een waarschuwing SYSLIB0004 tijdens het compileren.

De volgende CER-gerelateerde API's zijn verouderd:

De volgende CER-gerelateerde API's zijn echter niet verouderd:

Tijdelijke oplossingen

  • Als u een CER-kenmerk hebt toegepast op een methode, verwijdert u het kenmerk. Deze kenmerken hebben geen effect in .NET 5 en latere versies.

    // REMOVE the attribute below.
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    public void DoSomething()
    {
    }
    
    // REMOVE the attribute below.
    [PrePrepareMethod]
    public void DoSomething()
    {
    }
    
  • Als u belt RuntimeHelpers.ProbeForSufficientStack of RuntimeHelpers.PrepareContractedDelegate, verwijdert u de oproep. Deze aanroepen hebben geen effect in .NET 5 en latere versies.

    public void DoSomething()
    {
        // REMOVE the call below.
        RuntimeHelpers.ProbeForSufficientStack();
    
        // (Remainder of your method logic here.)
    }
    
  • Als u belt RuntimeHelpers.PrepareConstrainedRegions, verwijdert u de oproep. Deze aanroep heeft geen effect in .NET 5 en latere versies.

    public void DoSomething_Old()
    {
        // REMOVE the call below.
        RuntimeHelpers.PrepareConstrainedRegions();
        try
        {
            // try code
        }
        finally
        {
            // cleanup code
        }
    }
    
    public void DoSomething_Corrected()
    {
        // There is no call to PrepareConstrainedRegions. It's a normal try / finally block.
    
        try
        {
            // try code
        }
        finally
        {
            // cleanup code
        }
    }
    
  • Als u belt RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup, vervangt u de oproep door een standaardblok try/catch/finally .

    // The sample below produces warning SYSLIB0004.
    public void DoSomething_Old()
    {
        RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(MyTryCode, MyCleanupCode, null);
    }
    public void MyTryCode(object state) { /* try code */ }
    public void MyCleanupCode(object state, bool exceptionThrown) { /* cleanup code */ }
    
    // The corrected sample below does not produce warning SYSLIB0004.
    public void DoSomething_Corrected()
    {
        try
        {
            // try code
        }
        catch (Exception ex)
        {
            // exception handling code
        }
        finally
        {
            // cleanup code
        }
    }
    

Een waarschuwing onderdrukken

Als u de verouderde API's moet gebruiken, kunt u de waarschuwing in code of in het projectbestand onderdrukken.

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de waarschuwing uit te schakelen en vervolgens opnieuw in te schakelen.

// Disable the warning.
#pragma warning disable SYSLIB0004

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

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

Als u alle SYSLIB0004 waarschuwingen in uw project wilt onderdrukken, voegt u een <NoWarn> eigenschap toe aan het projectbestand.

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

Zie Waarschuwingen onderdrukken voor meer informatie.

Zie ook