Dela via


SYSLIB0004: Funktionen för begränsad körningsregion (CER) stöds inte

Funktionen Begränsade körningsregioner (CER) stöds endast i .NET Framework. Därför markeras olika CER-relaterade API:er som föråldrade, med början i .NET 5. Om du använder dessa API:er genereras en varning SYSLIB0004 vid kompileringstillfället.

Följande CER-relaterade API:er är föråldrade:

Följande CER-relaterade API:er är dock inte föråldrade:

Provisoriska lösningar

  • Om du har tillämpat ett CER-attribut på en metod tar du bort attributet. Dessa attribut har ingen effekt i .NET 5- och senare versioner.

    // REMOVE the attribute below.
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    public void DoSomething()
    {
    }
    
    // REMOVE the attribute below.
    [PrePrepareMethod]
    public void DoSomething()
    {
    }
    
  • Om du anropar RuntimeHelpers.ProbeForSufficientStack eller RuntimeHelpers.PrepareContractedDelegatetar du bort samtalet. Dessa anrop har ingen effekt i .NET 5- och senare versioner.

    public void DoSomething()
    {
        // REMOVE the call below.
        RuntimeHelpers.ProbeForSufficientStack();
    
        // (Remainder of your method logic here.)
    }
    
  • Om du anropar RuntimeHelpers.PrepareConstrainedRegionstar du bort samtalet. Det här anropet har ingen effekt i .NET 5- och senare versioner.

    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
        }
    }
    
  • Om du anropar RuntimeHelpers.ExecuteCodeWithGuaranteedCleanupersätter du anropet med ett standardblock 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
        }
    }
    

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 SYSLIB0004

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

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

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

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

Mer information finns i Utelämna varningar.

Se även