CA1422: Memvalidasi kompatibilitas platform - API usang
Properti | Nilai |
---|---|
ID Aturan | CA1422 |
Judul | Memvalidasi kompatibilitas platform - API usang |
Golongan | Interoperabilitas |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 8 | Sebagai peringatan |
Penyebab
API yang ditandai dengan ObsoletedOSPlatformAttribute dipanggil dari situs panggilan yang ditandai sebagai mendukung sistem operasi (OS) yang usang. Aturan ini mirip dengan CA1416: Memvalidasi kompatibilitas platform kecuali bahwa aturan ini memperingatkan tentang API yang usang pada platform tertentu versus tidak didukung sepenuhnya.
Deskripsi aturan
Memanggil API yang usang dalam OS (versi) tertentu dari situs panggilan yang dapat dijangkau dari OS (versi) tersebut tidak disarankan. Pertimbangkan untuk memanggil API yang tidak usang sebagai gantinya, atau pertimbangkan untuk tidak memanggil API usang pada sistem operasi yang terpengaruh.
Cara memperbaiki pelanggaran
Ada berbagai cara untuk memperbaiki pelanggaran aturan ini:
- Batasi situs panggilan ke sistem operasi yang tidak menyertakan versi usang dengan menandainya dengan UnsupportedOSPlatformAttribute atau ObsoletedOSPlatformAttribute.
- Jaga panggilan menggunakan System.OperatingSystem API, misalnya,
if (!OperatingSystem.IsLinux())
. - Jaga panggilan menggunakan API yang dianotasi dengan UnsupportedOSPlatformGuardAttribute atau dinegasikan SupportedOSPlatformGuardAttribute.
Contoh
Cuplikan kode berikut menunjukkan pelanggaran CA1422:
[SupportedOSPlatform("Windows")]
public void M1()
{
// Violates rule CA1422.
// This call site is reachable on 'Windows',
// but 'ObsoletedOnWindows62()'
// is obsoleted on 'Windows 6.2' and later.
ObsoletedOnWindows62();
}
[ObsoletedOSPlatform("Windows6.2")]
public void ObsoletedOnWindows62()
{ }
<SupportedOSPlatform("Windows")>
Public Sub M1()
' Violates rules CA1422.
' This call site is reachable on 'Windows',
' but 'ObsoletedOnWindows62()'
' is obsoleted on 'Windows 6.2' and later.
ObsoletedOnWindows62()
End Sub
<ObsoletedOSPlatform("Windows6.2")>
Public Sub ObsoletedOnWindows62()
End Sub
Cuplikan kode berikut memperbaiki pelanggaran dengan menambahkan ke situs UnsupportedOSPlatformAttribute panggilan atribut yang menentukan versi yang disebut metode telah usang.
[SupportedOSPlatform("Windows")]
[ObsoletedOSPlatform("Windows6.2")]
public void M1()
{
ObsoletedOnWindows62();
}
[ObsoletedOSPlatform("Windows6.2")]
public void ObsoletedOnWindows62()
{ }
<SupportedOSPlatform("Windows")>
<ObsoletedOSPlatform("Windows6.2")>
Public Sub M1()
ObsoletedOnWindows62()
End Sub
<ObsoletedOSPlatform("Windows6.2")>
Public Sub ObsoletedOnWindows62()
End Sub
Kapan harus menekan peringatan
Aman untuk menekan peringatan dari aturan ini jika Anda tidak khawatir tentang memanggil API usang, atau jika Anda tahu bahwa API usang tidak akan pernah dipanggil pada versi OS yang terpengaruh.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none
Untuk menonaktifkan seluruh kategori aturan ini, atur tingkat keparahan untuk kategori ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk