Bagikan melalui


API cache perakitan global sudah usang

.NET Core dan .NET 5 dan versi yang lebih baru menghilangkan konsep cache perakitan global (GAC) yang ada di .NET Framework. Dengan demikian, semua API .NET Core dan .NET 5+ yang menangani GAC gagal atau tidak melakukan operasi.

Untuk membantu mengarahkan pengembang menjauh dari API ini, beberapa API terkait GAC ditandai sebagai usang, dan menghasilkan SYSLIB0005 peringatan pada waktu kompilasi. API ini dapat dihapus dalam versi .NET yang akan datang.

Deskripsi perubahan

API berikut ditandai usang.

API Ditandai usang di...
Assembly.GlobalAssemblyCache 5.0 RC1

Dalam .NET Framework 2.x - 4.x, GlobalAssemblyCache properti mengembalikan true jika rakitan yang dikueri dimuat dari GAC, dan false jika dimuat dari lokasi yang berbeda pada disk. Dalam .NET Core 2.x - 3.x, GlobalAssemblyCache selalu mengembalikan false, mencerminkan bahwa GAC tidak ada di .NET Core.

Assembly asm = typeof(object).Assembly;
// Prints 'True' on .NET Framework, 'False' on .NET Core.
Console.WriteLine(asm.GlobalAssemblyCache);

Di .NET 5 dan versi yang GlobalAssemblyCache lebih baru, properti terus selalu mengembalikan false. Namun, getter properti juga ditandai sebagai usang untuk menunjukkan kepada penelepon bahwa mereka harus berhenti mengakses properti. Pustaka dan aplikasi tidak boleh menggunakan GlobalAssemblyCache API untuk membuat penentuan tentang perilaku run-time, karena selalu kembali false dalam versi .NET Core dan .NET 5 dan yang lebih baru.

Assembly asm = typeof(object).Assembly;
// Prints 'False' on .NET 5+; also produces warning SYSLIB0005 at compile time.
Console.WriteLine(asm.GlobalAssemblyCache);

Ini adalah perubahan kompilasi-waktu saja. Tidak ada perubahan run-time dari versi .NET Core sebelumnya.

Alasan untuk berubah

Cache rakitan global (GAC) tidak ada sebagai konsep dalam .NET Core dan .NET 5 dan versi yang lebih baru.

Versi yang diperkenalkan

.NET 5.0

  • Jika aplikasi Anda mengkueri GlobalAssemblyCache properti , pertimbangkan untuk menghapus panggilan. Jika Anda menggunakan GlobalAssemblyCache nilai untuk memilih antara "assembly in the GAC"-flow vs. "assembly not in the GAC"-flow at run time, pertimbangkan kembali apakah alur masih masuk akal untuk aplikasi .NET Core atau .NET 5+.

  • Jika Anda harus terus menggunakan API usang, Anda dapat menekan SYSLIB0005 peringatan dalam kode.

    Assembly asm = typeof(object).Assembly;
    #pragma warning disable SYSLIB0005 // Disable the warning.
    // Prints 'False' on .NET 5+.
    Console.WriteLine(asm.GlobalAssemblyCache);
    #pragma warning restore SYSLIB0005 // Re-enable the warning.
    

    Anda juga dapat menekan peringatan dalam file proyek Anda, yang menonaktifkan peringatan untuk semua file sumber dalam proyek.

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
       <TargetFramework>net5.0</TargetFramework>
       <!-- NoWarn below will suppress SYSLIB0005 project-wide -->
       <NoWarn>$(NoWarn);SYSLIB0005</NoWarn>
      </PropertyGroup>
    </Project>
    

    Menekan SYSLIB0005 hanya menonaktifkan peringatan usang GlobalAssemblyCache . Ini tidak menonaktifkan peringatan lainnya.

API yang Terpengaruh