Udostępnij za pośrednictwem


SYSLIB0004: Funkcja regionu wykonywania ograniczonego (CER) nie jest obsługiwana

Funkcja Regiony wykonywania ograniczonego (CER) jest obsługiwana tylko w programie .NET Framework. W związku z tym różne interfejsy API związane z cer są oznaczone jako przestarzałe, począwszy od platformy .NET 5. Użycie tych interfejsów API generuje ostrzeżenie SYSLIB0004 w czasie kompilacji.

Następujące interfejsy API związane z cer są przestarzałe:

Jednak następujące interfejsy API związane z cer nieprzestarzałe:

Obejścia

  • Jeśli atrybut CER został zastosowany do metody, usuń atrybut . Te atrybuty nie mają wpływu na platformę .NET 5 i nowsze wersje.

    // REMOVE the attribute below.
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    public void DoSomething()
    {
    }
    
    // REMOVE the attribute below.
    [PrePrepareMethod]
    public void DoSomething()
    {
    }
    
  • Jeśli dzwonisz RuntimeHelpers.ProbeForSufficientStack lub RuntimeHelpers.PrepareContractedDelegate, usuń połączenie. Te wywołania nie mają wpływu na platformę .NET 5 i nowsze wersje.

    public void DoSomething()
    {
        // REMOVE the call below.
        RuntimeHelpers.ProbeForSufficientStack();
    
        // (Remainder of your method logic here.)
    }
    
  • Jeśli wywołujesz metodę RuntimeHelpers.PrepareConstrainedRegions, usuń wywołanie . To wywołanie nie ma wpływu na platformę .NET 5 i nowsze wersje.

    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
        }
    }
    
  • Jeśli wywołujesz RuntimeHelpers.ExecuteCodeWithGuaranteedCleanupmetodę , zastąp wywołanie blokiem standardowym 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
        }
    }
    

Pomijanie ostrzeżenia

Jeśli musisz używać przestarzałych interfejsów API, możesz pominąć ostrzeżenie w kodzie lub w pliku projektu.

Aby pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć ostrzeżenie.

// Disable the warning.
#pragma warning disable SYSLIB0004

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

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

Aby pominąć wszystkie SYSLIB0004 ostrzeżenia w projekcie, dodaj <NoWarn> właściwość do pliku projektu.

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

Aby uzyskać więcej informacji, zobacz Pomijanie ostrzeżeń.

Zobacz też