Fitur kedaluwarsa di .NET 5+

Mulai dari .NET 5, beberapa API yang baru ditandai sebagai usang menggunakan dua properti baru pada ObsoleteAttribute.

  • Properti ObsoleteAttribute.DiagnosticId memberi tahu pengkompilasi untuk menghasilkan peringatan build menggunakan ID diagnostik kustom. ID kustom memungkinkan peringatan usang ditekan secara khusus dan terpisah satu sama lain. Dalam kasus kedaluarsa System* namespace, format untuk ID diagnostik kustom adalah SYSLIB0XXX. Dalam kasus penghapusan Microsoft.Extensions, format untuk ID diagnostik kustom adalah EXTOBS0XXX.
  • Properti ObsoleteAttribute.UrlFormat memberi tahu pengkompilasi untuk menyertakan tautan URL untuk mempelajari selengkapnya tentang kedaluwarsa.

Jika Anda mengalami peringatan atau kesalahan build karena penggunaan API usang, ikuti panduan khusus yang disediakan untuk ID diagnostik yang tercantum dalam tabel referensi berikut. Peringatan atau kesalahan terkait keusangan ini tidak bisa ditekan dengan menggunakan ID diagnostik standar (CS0618) untuk tipe atau anggota yang sudah usang; gunakan nilai ID diagnostik kustom SYSLIB0XXX atau EXTOBS0XXX sebagai alternatif. Untuk informasi selengkapnya, lihat Menyembunyikan peringatan.

Tabel berikut ini menyediakan indeks untuk API usang dengan ID diagnostik kustom di .NET 5 dan versi yang lebih baru:

Penghentian SYSLIB

Tabel berikut ini mencantumkan kedaluarsa SYSLIB0XXX di .NET 5+.

Diagnostik ID Peringatan atau kesalahan Deskripsi
SYSLIB0001 Peringatan Pengodean UTF-7 tidak aman dan tidak boleh digunakan. Pertimbangkan untuk menggunakan UTF-8 sebagai gantinya.
SYSLIB0002 Kesalahan PrincipalPermissionAttribute tidak diakui oleh runtime dan tidak boleh digunakan.
SYSLIB0003 Peringatan Keamanan akses kode (CAS) tidak didukung atau diterapkan oleh runtime.
SYSLIB0004 Peringatan Fitur wilayah eksekusi terbatas (CER) tidak didukung.
SYSLIB0005 Peringatan Cache perakitan global (GAC) tidak didukung.
SYSLIB0006 Peringatan Thread.Abort() tidak didukung dan memunculkan PlatformNotSupportedException.
SYSLIB0007 Peringatan Penerapan default dari algoritma kriptografis ini tidak didukung.
SYSLIB0008 Peringatan API CreatePdbGenerator() tidak didukung dan memunculkan PlatformNotSupportedException.
SYSLIB0009 Peringatan AuthenticationManager tidak didukung. Metode akan melakukan 'no-op' atau melempar PlatformNotSupportedException.
SYSLIB0010 Peringatan Beberapa API jarak jauh tidak didukung dan menghasilkan PlatformNotSupportedException.
SYSLIB0011 Peringatan Serialisasi BinaryFormatter sudah kedaluwarsa dan tidak boleh digunakan.
SYSLIB0012 Peringatan Assembly.CodeBase dan Assembly.EscapedCodeBase hanya disertakan untuk kompatibilitas .NET Framework. Gunakan Assembly.Location sebagai gantinya.
SYSLIB0013 Peringatan Uri.EscapeUriString(String) dapat merusak string Uri dalam beberapa kasus. Pertimbangkan untuk menggunakan Uri.EscapeDataString(String) komponen string kueri sebagai gantinya.
SYSLIB0014 Peringatan WebRequest, HttpWebRequest, ServicePoint, dan WebClient sudah usang. Gunakan HttpClient sebagai gantinya.
SYSLIB0015 Peringatan DisablePrivateReflectionAttribute tidak berpengaruh pada .NET 6+.
SYSLIB0016 Peringatan Gunakan overload Graphics.GetContextInfo yang menerima argumen untuk performa yang lebih baik dan alokasi yang lebih sedikit.
SYSLIB0017 Peringatan Penandatanganan nama yang kuat tidak didukung dan menghasilkan PlatformNotSupportedException.
SYSLIB0018 Peringatan Pemuatan hanya refleksi tidak didukung dan memicu PlatformNotSupportedException.
SYSLIB0019 Peringatan Anggota System.Runtime.InteropServices.RuntimeEnvironment, SystemConfigurationFile, GetRuntimeInterfaceAsIntPtr(Guid, Guid), dan GetRuntimeInterfaceAsObject(Guid, Guid) tidak lagi didukung dan menghasilkan PlatformNotSupportedException.
SYSLIB0020 Peringatan JsonSerializerOptions.IgnoreNullValues sudah usang. Untuk mengabaikan nilai null saat membuat serialisasi, atur DefaultIgnoreCondition ke JsonIgnoreCondition.WhenWritingNull.
SYSLIB0021 Peringatan Jenis kriptografi turunan sudah usang. sebagai gantinya, gunakan metode Create pada jenis dasar.
SYSLIB0022 Peringatan Jenis Rijndael dan RijndaelManaged sudah usang. Gunakan Aes sebagai gantinya.
SYSLIB0023 Peringatan RNGCryptoServiceProvider sudah usang. Untuk menghasilkan angka acak, gunakan salah satu metode statis RandomNumberGeneratorsebagai gantinya.
SYSLIB0024 Peringatan Membuat dan membongkar AppDomains tidak didukung dan menghasilkan pengecualian.
SYSLIB0025 Peringatan SuppressIldasmAttribute tidak berpengaruh pada .NET 6+.
SYSLIB0026 Peringatan X509Certificate and X509Certificate2 tidak dapat diubah. Gunakan konstruktor yang sesuai untuk membuat sertifikat baru.
SYSLIB0027 Peringatan PublicKey.Key sudah usang. Gunakan metode yang sesuai untuk mendapatkan kunci umum, seperti GetRSAPublicKey().
SYSLIB0028 Peringatan X509Certificate2.PrivateKey sudah usang. Gunakan metode yang sesuai untuk mendapatkan kunci privat, seperti RSACertificateExtensions.GetRSAPrivateKey(X509Certificate2), atau gunakan X509Certificate2.CopyWithPrivateKey(ECDiffieHellman) metode untuk membuat instans baru dengan kunci privat.
SYSLIB0029 Peringatan ProduceLegacyHmacValues sudah usang. Pembuatan nilai HMAC lama tidak lagi didukung.
SYSLIB0030 Peringatan HMACSHA1 selalu menggunakan implementasi algoritma yang disediakan oleh platform. Gunakan konstruktor tanpa parameter useManagedSha1.
SYSLIB0031 Peringatan CryptoConfig.EncodeOID(String) sudah usang. Gunakan fungsionalitas ASN.1 yang disediakan di System.Formats.Asn1.
SYSLIB0032 Peringatan Pemulihan dari pengecualian status proses yang rusak tidak didukung; HandleProcessCorruptedStateExceptionsAttribute diabaikan.
SYSLIB0033 Peringatan Rfc2898DeriveBytes.CryptDeriveKey(String, String, Int32, Byte[]) usang dan tidak didukung. Gunakan PasswordDeriveBytes.CryptDeriveKey(String, String, Int32, Byte[]) sebagai gantinya.
SYSLIB0034 Peringatan CmsSigner(CspParameters) sudah usang. Gunakan konstruktor alternatif sebagai gantinya.
SYSLIB0035 Peringatan SignerInfo.ComputeCounterSignature() sudah usang. Gunakan overload yang menerima CmsSigner sebagai gantinya.
SYSLIB0036 Peringatan Regex.CompileToAssembly sudah kedaluwarsa dan tidak didukung. Gunakan RegexGeneratorAttribute dengan generator sumber regex sebagai gantinya.
SYSLIB0037 Peringatan Anggota AssemblyName, HashAlgorithm, ProcessorArchitecture, dan VersionCompatibility sudah kedaluwarsa dan tidak didukung.
SYSLIB0038 Peringatan SerializationFormat.Binary sudah kedaluwarsa dan tidak boleh digunakan.
SYSLIB0039 Peringatan TLS versi 1.0 dan 1.1 memiliki kerentanan yang diketahui dan tidak direkomendasikan. Gunakan versi TLS yang lebih baru, atau gunakan SslProtocols.None untuk mengikuti default OS.
SYSLIB0040 Peringatan EncryptionPolicy.NoEncryption dan EncryptionPolicy.AllowNoEncryption secara signifikan mengurangi keamanan dan tidak boleh digunakan dalam kode produksi.
SYSLIB0041 Peringatan Algoritme hash default dan jumlah perulangan di konstruktor Rfc2898DeriveBytes sudah usang dan tidak aman. Gunakan konstruktor yang menerima algoritme hash dan jumlah perulangan.
SYSLIB0042 Peringatan ToXmlString dan FromXmlString tidak memiliki penerapan untuk jenis kriptografi kurva eliptik (ECC), dan sudah kedaluwarsa. Gunakan format impor dan ekspor standar seperti ExportSubjectPublicKeyInfo atau ImportSubjectPublicKeyInfo untuk kunci privat, dan ExportPkcs8PrivateKey atau ImportPkcs8PrivateKey untuk kunci privat.
SYSLIB0043 Peringatan ECDiffieHellmanPublicKey.ToByteArray() dan konstruktor terkait tidak memiliki penerapan yang konsisten dan dapat dioperasikan di semua platform. Gunakan ECDiffieHellmanPublicKey.ExportSubjectPublicKeyInfo() sebagai gantinya.
SYSLIB0044 Peringatan AssemblyName.CodeBase dan AssemblyName.EscapedCodeBase sudah usang. Menggunakannya untuk memuat rakitan tidak didukung.
SYSLIB0045 Peringatan Metode pabrik kriptografi yang menerima nama algoritma sudah usang. Sebagai gantinya, gunakan metode factory tanpa parameter Create pada jenis algoritma.
SYSLIB0046 Peringatan Metode ControlledExecution.Run(Action, CancellationToken) ini mungkin merusak proses dan tidak boleh digunakan dalam kode produksi.
SYSLIB0047 Peringatan XmlSecureResolver sudah usang. Gunakan XmlResolver.ThrowingResolver sebagai gantinya saat mencoba melarang resolusi entitas eksternal XML.
SYSLIB0048 Peringatan RSA.EncryptValue(Byte[]) dan RSA.DecryptValue(Byte[]) sudah usang. Gunakan RSA.Encrypt dan RSA.Decrypt sebagai gantinya.
SYSLIB0049 Peringatan JsonSerializerOptions.AddContext sudah usang. Untuk mendaftarkan JsonSerializerContext, gunakan properti TypeInfoResolver atau TypeInfoResolverChain.
SYSLIB0050 Peringatan Serialisasi berbasis formatter usang dan tidak boleh digunakan.
SYSLIB0051 Peringatan API yang mendukung serialisasi berbasis formatter kuno sudah kadaluarsa. Mereka tidak boleh dipanggil atau diperluas oleh kode aplikasi.
SYSLIB0052 Peringatan API yang mendukung mekanisme usang untuk ekstensibilitas Regex sudah usang.
SYSLIB0053 Peringatan AesGcm harus menunjukkan ukuran tag yang diperlukan untuk enkripsi dan dekripsi. Gunakan konstruktor yang menerima ukuran tag.
SYSLIB0054 Peringatan Thread.VolatileRead dan Thread.VolatileWrite sudah usang. Gunakan Volatile.Read atau Volatile.Write sebagai gantinya.
SYSLIB0055 Peringatan AdvSimd.ShiftRightLogicalRoundedNarrowingSaturate* metode dengan parameter yang ditandatangani sudah usang. Gunakan overload yang memiliki parameter tipe unsigned sebagai gantinya.
SYSLIB0056 Peringatan Assembly.LoadFrom dengan kustomisasi AssemblyHashAlgorithm sudah usang. ** Gunakan fungsi overload tanpa AssemblyHashAlgorithm.
SYSLIB0057 Peringatan X509Certificate2 dan X509Certificate konstruktor untuk biner dan konten file sudah usang.
SYSLIB0058 Peringatan Properti KeyExchangeAlgorithm, KeyExchangeStrength, CipherAlgorithm, CipherAlgorithmStrength, HashAlgorithm, dan HashStrength dari SslStream merupakan usang. Gunakan NegotiatedCipherSuite sebagai gantinya.
SYSLIB0059 Peringatan SystemEvents.EventsThreadShutdown panggilan balik tidak dijalankan sebelum proses keluar. Gunakan AppDomain.ProcessExit sebagai gantinya.
SYSLIB0060 Peringatan Konstruktor pada System.Security.Cryptography.Rfc2898DeriveBytes sudah ketinggalan zaman. Gunakan Rfc2898DeriveBytes.Pbkdf2 sebagai gantinya.
SYSLIB0061 Peringatan Queryable Queryable.MaxBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TSource>) dan Queryable.MinBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TSource>) yang mengambil IComparer<TSource> sudah usang. Gunakan yang baru yang mengambil IComparer<TKey>.
SYSLIB0062 Peringatan XsltSettings.EnableScript sudah usang.
SYSLIB0064 Peringatan RSACryptoServiceProvider.Encrypt(Byte[], Boolean) dan RSACryptoServiceProvider.Decrypt(Byte[], Boolean) sudah usang. Gunakan overload yang menerima RSAEncryptionPadding sebagai gantinya.

KEDALUARSA EXTOBS

Tabel berikut mencantumkan kedaluarsa EXTOBS0XXX dari Microsoft.Extensions pustaka.

Diagnostik ID Peringatan atau kesalahan Deskripsi
EXTOBS0001 Peringatan IResourceMonitor usang dan akan dihapus dalam versi mendatang. Pertimbangkan untuk menggunakan instrumen yang dapat diamati Pemantauan Sumber Daya.
EXTOBS0002 Peringatan Metode AddServiceLogEnricher ekstensi telah ditandai sebagai usang mulai dari paket versi 10.1.0. Metode memperkaya log aplikasi, bukan log layanan, sehingga telah diganti dengan metode yang diberi nama AddApplicationLogEnricher secara benar.

Menutupi peringatan

Sebaiknya Anda menggunakan solusi yang tersedia jika memungkinkan. Namun, jika Anda tidak dapat mengubah kode, Anda dapat menekan peringatan melalui #pragma direktif atau <NoWarn> pengaturan proyek. Jika Anda harus menggunakan API usang, dan diagnostik SYSLIB0XXX atau EXTOBS0XXX tidak muncul sebagai kesalahan, Anda dapat mengabaikan peringatan tersebut dalam kode atau dalam file proyek Anda.

Untuk menutupi peringatan dalam kode:

// Disable the warning.
#pragma warning disable SYSLIB0001

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

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

Untuk menutupi peringatan dalam file proyek:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   <TargetFramework>net6.0</TargetFramework>
   <!-- NoWarn below suppresses SYSLIB0001 project-wide -->
   <NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
   <!-- To suppress multiple warnings, you can use multiple NoWarn elements -->
   <NoWarn>$(NoWarn);SYSLIB0002</NoWarn>
   <NoWarn>$(NoWarn);SYSLIB0003</NoWarn>
   <!-- Alternatively, you can suppress multiple warnings by using a semicolon-delimited list -->
   <NoWarn>$(NoWarn);SYSLIB0001;SYSLIB0002;SYSLIB0003</NoWarn>
  </PropertyGroup>
</Project>

Catatan

Menyembunyikan peringatan dengan cara ini hanya menonaktifkan peringatan kedaluwarsa yang Anda tentukan. Tindakan ini tidak menonaktifkan peringatan lain, termasuk peringatan usang dengan ID diagnostik yang berbeda.

Lihat juga