Bagikan melalui


SYSLIB0004: Fitur wilayah eksekusi yang dibatasi (CER) tidak didukung

Fitur Wilayah eksekusi yang dibatasi (CER) hanya didukung dalam .NET Framework. Dengan demikian, berbagai API terkait CER ditandai usang, mulai dari .NET 5. Menggunakan API ini menghasilkan peringatan SYSLIB0004 pada waktu kompilasi.

API terkait CER berikut sudah usang:

Namun, API terkait CER berikut tidak usang:

Penyelesaian masalah

  • Jika Anda telah menerapkan atribut CER ke metode , hapus atribut . Atribut ini tidak berpengaruh dalam .NET 5 dan versi yang lebih baru.

    // REMOVE the attribute below.
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    public void DoSomething()
    {
    }
    
    // REMOVE the attribute below.
    [PrePrepareMethod]
    public void DoSomething()
    {
    }
    
  • Jika Anda memanggil RuntimeHelpers.ProbeForSufficientStack atau RuntimeHelpers.PrepareContractedDelegate, hapus panggilan. Panggilan ini tidak berpengaruh dalam .NET 5 dan versi yang lebih baru.

    public void DoSomething()
    {
        // REMOVE the call below.
        RuntimeHelpers.ProbeForSufficientStack();
    
        // (Remainder of your method logic here.)
    }
    
  • Jika Anda memanggil RuntimeHelpers.PrepareConstrainedRegions, hapus panggilan. Panggilan ini tidak berpengaruh dalam .NET 5 dan versi yang lebih baru.

    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
        }
    }
    
  • Jika Anda memanggil RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup, ganti panggilan dengan blok standar 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
        }
    }
    

Menyembunyikan peringatan

Jika Anda harus menggunakan API usang, Anda dapat menekan peringatan dalam kode atau dalam file proyek Anda.

Untuk menekan hanya satu pelanggaran, tambahkan direktif praprosedur ke file sumber Anda untuk menonaktifkan lalu mengaktifkan kembali peringatan.

// Disable the warning.
#pragma warning disable SYSLIB0004

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

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

Untuk menekan semua SYSLIB0004 peringatan dalam proyek Anda, tambahkan <NoWarn> properti ke file proyek Anda.

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

Untuk informasi selengkapnya, lihat Menyembunyikan peringatan.

Lihat juga