SYSLIB0004: A korlátozott végrehajtási régió (CER) funkció nem támogatott

A korlátozott végrehajtási régiók (CER) funkció csak .NET-keretrendszer támogatott. Ezért a különböző CER-hez kapcsolódó API-k elavultnak vannak megjelölve, kezdve a .NET 5-tel. Ezen API-k használata figyelmeztetést SYSLIB0004 generál fordításkor.

A következő CER-hez kapcsolódó API-k elavultak:

A következő CER-hez kapcsolódó API-k azonban nem elavultak:

Kerülő megoldások

  • Ha cerattribútumot alkalmazott egy metódusra, távolítsa el az attribútumot. Ezeknek az attribútumoknak nincs hatása a .NET 5-ös és újabb verzióiban.

    // REMOVE the attribute below.
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    public void DoSomething()
    {
    }
    
    // REMOVE the attribute below.
    [PrePrepareMethod]
    public void DoSomething()
    {
    }
    
  • Ha hív RuntimeHelpers.ProbeForSufficientStack , vagy RuntimeHelpers.PrepareContractedDelegatetávolítsa el a hívást. Ezek a hívások nem lépnek érvénybe a .NET 5-ös és újabb verzióiban.

    public void DoSomething()
    {
        // REMOVE the call below.
        RuntimeHelpers.ProbeForSufficientStack();
    
        // (Remainder of your method logic here.)
    }
    
  • Ha hív RuntimeHelpers.PrepareConstrainedRegions, távolítsa el a hívást. A hívásnak nincs hatása a .NET 5-ös és újabb verzióiban.

    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
        }
    }
    
  • Ha hív RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup, cserélje le a hívást egy szabványos try/catch/finally blokkra.

    // 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
        }
    }
    

Figyelmeztetés mellőzése

Ha az elavult API-kat kell használnia, letilthatja a figyelmeztetést a kódban vagy a projektfájlban.

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz, hogy letiltsa, majd engedélyezze újra a figyelmeztetést.

// Disable the warning.
#pragma warning disable SYSLIB0004

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

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

Ha el szeretné tiltani a SYSLIB0004 projekt összes figyelmeztetését, adjon hozzá egy tulajdonságot <NoWarn> a projektfájlhoz.

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

További információ: Figyelmeztetések mellőzése.

Lásd még