Aturan kualitas kode

Analisis kode .NET menyediakan aturan yang bertujuan untuk meningkatkan kualitas kode. Aturan diatur ke dalam area seperti desain, globalisasi, performa, dan keamanan. Aturan tertentu khusus untuk penggunaan API .NET, sementara yang lain tentang kualitas kode generik.

Indeks aturan

Tabel berikut mencantumkan aturan analisis kualitas kode.

ID aturan dan peringatan Deskripsi
CA1000: Jangan deklarasikan anggota statis pada jenis generik Ketika anggota statik dari jenis generik dipanggil, argumen jenis harus ditentukan untuk jenis tersebut. Ketika anggota instans generik yang tidak mendukung inferensi dipanggil, argumen jenis harus ditentukan untuk anggota tersebut. Dalam dua kasus ini, sintaks untuk menentukan argumen jenis berbeda dan dapat membingungkan.
CA1001: Jenis yang memiliki bidang sekali pakai sifatnya harus sekali pakai Kelas mendeklarasikan dan menerapkan bidang instans yang merupakan jenis System.IDisposable, dan kelas tidak menerapkan IDisposable. Kelas yang mendeklarasikan bidang IDisposable secara tidak langsung memiliki sumber daya yang tidak dikelola dan harus menerapkan antarmuka IDisposable.
CA1002: Jangan mengekspos daftar generik System.Collections.Generic.List<(Dari <(T>)>) adalah kumpulan generik yang dirancang untuk performa, bukan warisan. Oleh karena itu, Daftar tidak berisi anggota virtual. Kumpulan generik yang dirancang untuk warisan harus diperlihatkan sebagai gantinya.
CA1003: Menggunakan instans penanganan aktivitas generik Jenis berisi delegasi yang menampilkan void, yang tanda tangannya berisi dua parameter (yang pertama objek dan yang kedua jenis yang dapat ditetapkan ke EventArgs), dan rakitan berisi target Microsoft .NET Framework 2.0.
CA1005: Menghindari parameter yang berlebihan pada jenis generik Semakin banyak parameter jenis yang dimiliki oleh jenis generik, semakin sulit untuk mengetahui dan mengingat apa yang diwakili oleh setiap parameter jenis. Biasanya terlihat jelas dengan satu parameter jenis, seperti dalam Daftar<T>, dan dalam kasus tertentu yang memiliki dua parameter jenis, seperti dalam Kamus<TKey, TValue>. Namun, jika ada lebih dari dua parameter jenis, kesulitannya menjadi terlalu besar bagi sebagian besar pengguna.
CA1008: Enum harus memiliki nilai nol Nilai default dari enumerasi yang batal diinisialisasi, sama seperti jenis nilai lainnya, adalah nol. Enumerasi yang tidak dikaitkan dengan nonflags harus menentukan anggota dengan menggunakan nilai nol sehingga nilai default adalah nilai enumerasi yang valid. Jika enumerasi yang memiliki atribut FlagsAttribute diterapkan menentukan anggota bernilai nol, nama enumerasi harus "None" untuk menunjukkan bahwa tidak ada nilai yang ditetapkan dalam enumerasi.
CA1010: Pengumpulan harus menerapkan antarmuka generik Untuk memperluas kegunaan kumpulan, terapkan salah satu antarmuka kumpulan generik. Kemudian kumpulan tersebut dapat digunakan untuk mengisi jenis kumpulan generik.
CA1012: Jenis abstrak tidak boleh memiliki konstruktor publik Konstruktor pada jenis abstrak hanya dapat dipanggil oleh jenis turunan. Karena konstruktor publik membuat instans dari jenis, dan Anda tidak dapat membuat instans dari jenis abstrak, jenis abstrak yang memiliki konstruktor publik dirancang dengan tidak benar.
CA1014: Tandai rakitan dengan CLSCompliantAttribute Common Language Specification (CLS) menentukan batasan penamaan, jenis data, dan aturan yang harus dipatuhi oleh rakitan jika akan digunakan di seluruh bahasa pemrogram. Desain yang baik menentukan bahwa semua rakitan secara eksplisit menunjukkan kepatuhan CLS dengan menggunakan CLSCompliantAttribute . Jika atribut ini tidak ada di rakitan, rakitan tidak sesuai.
CA1016: Tandai rakitan dengan AssemblyVersionAttribute .NET menggunakan nomor versi untuk mengidentifikasi rakitan secara unik dan untuk mengikat jenis dalam rakitan bernama kuat. Nomor versi digunakan bersama dengan versi dan kebijakan penerbit. Secara default, aplikasi hanya berjalan dengan versi rakitan yang digunakan untuk membuat rakitan.
CA1017: Menandai rakitan dengan ComVisibleAttribute ComVisibleAttribute menentukan cara klien COM mengakses kode terkendali. Desain yang baik menentukan bahwa rakitan secara eksplisit menunjukkan visibilitas COM. Visibilitas COM dapat diatur untuk seluruh rakitan dan kemudian diganti untuk setiap jenis dan anggota jenis. Jika atribut ini tidak ada, konten rakitan dapat dilihat oleh klien COM.
CA1018: Tandai atribut dengan AttributeUsageAttribute Saat Anda menentukan atribut kustom, tandai dengan menggunakan AttributeUsageAttribute untuk menunjukkan tempat atribut kustom dapat diterapkan dalam kode sumber. Arti dan tujuan penggunaan atribut akan menentukan lokasi valid atribut dalam kode.
CA1019: Tentukan pengakses untuk argumen atribut Atribut dapat menentukan argumen wajib yang harus ditentukan saat Anda menerapkan atribut ke target. Hal ini juga dikenal sebagai argumen posisi karena diberikan ke konstruktor atribut sebagai parameter posisi. Untuk setiap argumen wajib, atribut juga harus menyediakan properti baca-saja yang sesuai sehingga nilai argumen dapat diambil pada waktu eksekusi. Atribut juga dapat menentukan argumen opsional, yang juga dikenal sebagai argumen bernama. Argumen ini diberikan ke konstruktor atribut dengan nama dan harus memiliki properti baca/tulis yang sesuai.
CA1021: Hindari parameter keluar Meneruskan jenis dengan referensi (menggunakan out atau ref) membutuhkan pengalaman dengan pointer, memahami bagaimana jenis nilai dan jenis referensi berbeda, dan menangani metode dengan beberapa nilai kembalian. Selain itu, perbedaan antara parameter out dan ref tidak dipahami secara luas.
CA1024: Gunakan properti jika sesuai Metode publik atau dilindungi memiliki nama yang dimulai dengan "Dapatkan", tidak mengambil parameter, dan mengembalikan nilai yang bukan larik. Metode mungkin menjadi kandidat yang baik untuk menjadi properti.
CA1027: Tandai enum dengan FlagsAttribute Enumerasi adalah jenis nilai yang menentukan sekumpulan konstanta bernama terkait. Terapkan FlagsAttribute ke enumerasi ketika konstanta bernama enumerasi dapat digabungkan secara bermakna.
CA1028: Penyimpanan enum harus Int32 Enumerasi adalah jenis nilai yang menentukan sekumpulan konstanta bernama terkait. Secara default, jenis data System.Int32 digunakan untuk menyimpan nilai konstanta. Meskipun Anda dapat mengubah jenis dasar ini, hal ini tidak diperlukan atau direkomendasikan untuk sebagian besar skenario.
CA1030: Gunakan peristiwa jika perlu Aturan ini mendeteksi metode yang memiliki nama yang biasanya akan digunakan untuk peristiwa. Jika metode dipanggil sebagai respons terhadap perubahan status yang ditentukan dengan jelas, metode tersebut harus dipanggil oleh penanganan aktivitas. Objek yang memanggil metode harus memunculkan peristiwa, bukan memanggil metode secara langsung.
CA1031: Jangan tangkap jenis pengecualian umum Pengecualian umum tidak boleh ditangkap. Tangkap pengecualian yang lebih spesifik, atau munculkan kembali pengecualian umum sebagai pernyataan terakhir di blok penangkapan.
CA1032: Terapkan konstruktor pengecualian standar Kegagalan untuk menyediakan kumpulan lengkap konstruktor dapat mempersulit dalam menangani pengecualian dengan benar.
CA1033: Metode antarmuka harus dapat dipanggil berdasarkan jenis turunan Jenis yang terlihat secara eksternal yang tidak disegel menyediakan penerapan metode eksplisit dari antarmuka publik dan tidak memberikan metode alternatif yang terlihat secara eksternal yang memiliki nama yang sama.
CA1034: Jenis berlapis tidak boleh terlihat Jenis berlapis adalah jenis yang dideklarasikan dalam cakupan jenis lain. Jenis berlapis berguna untuk menyertakan detail penerapan privat dari jenis yang disimpan. Digunakan untuk tujuan ini, jeni berlapis tidak boleh terlihat secara eksternal.
CA1036: Ganti metode pada jenis yang sebanding Jenis publik atau dilindungi menerapkan antarmuka System.IComparable. Jenis tersebut tidak mengganti Object.Equals juga tidak membebani operator khusus bahasa untuk kesetaraan, ketidaksetaraan, kurang dari, atau lebih besar dari.
CA1040: Menghindari antarmuka kosong Antarmuka menentukan anggota yang menyediakan perilaku atau kontrak penggunaan. Fungsionalitas yang dijelaskan oleh antarmuka dapat diadopsi oleh jenis apa pun, di mana pun jenis tersebut muncul dalam hierarki warisan. Jenis menerapkan antarmuka dengan menyediakan penerapan untuk anggota antarmuka. Antarmuka kosong tidak menentukan anggota apa pun; oleh karena itu, antarmuka kosong tidak menentukan kontrak yang dapat diterapkan.
CA1041: Berikan pesan ObsoleteAttribute Jenis atau anggota ditandai dengan menggunakan atribut System.ObsoleteAttribute yang tidak memiliki properti ObsoleteAttribute.Message yang ditentukan. Saat jenis atau anggota yang ditandai dengan menggunakan ObsoleteAttribute dikompilasi, properti Pesan dari atribut akan ditampilkan. Ini memberikan informasi kepada pengguna tentang jenis atau anggota yang sudah usang.
CA1043: Gunakan argumen integral atau string untuk pengindeks Pengindeks (yaitu, properti yang diindeks) harus menggunakan jenis integral atau string untuk indeks. Jenis ini biasanya digunakan untuk mengindeks struktur data dan meningkatkan kegunaan pustaka. Penggunaan jenis Objek harus dibatasi pada kasus-kasus di mana integral tertentu atau jenis string tidak dapat ditentukan pada waktu desain.
CA1044: Properti tidak boleh tulis saja Meskipun dapat diterima dan sering kali diperlukan untuk memiliki properti baca-saja, panduan desain melarang penggunaan properti tulis saja. Ini karena membiarkan pengguna menetapkan nilai, lalu mencegah pengguna melihat nilai tersebut, tidak memberikan keamanan apa pun. Selain itu, tanpa akses baca, status objek bersama tidak dapat dilihat, yang membatasi kegunaannya.
CA1045: Jangan teruskan jenis dengan referensi Meneruskan jenis dengan referensi (menggunakan out atau ref) membutuhkan pengalaman dengan pointer, memahami bagaimana jenis nilai dan jenis referensi berbeda, dan menangani metode yang memiliki beberapa nilai pengembalian. Arsitek pustaka yang merancang untuk audiens umum seharusnya tidak mengharapkan pengguna menjadi mahir dalam bekerja dengan parameter out atau ref.
CA1046: Jangan membebani sama dengan operator dengan jenis referensi Untuk jenis referensi, penerapan default dari operator kesetaraan hampir selalu benar. Secara default, dua referensi sama hanya jika keduanya mengarah ke objek yang sama.
CA1047: Jangan deklarasikan anggota yang dilindungi dalam jenis yang disegel Jenis mendeklarasikan anggota yang dilindungi sehingga jenis yang mewarisi dapat mengakses atau mengganti anggota. Berdasarkan definisi, jenis yang disegel tidak dapat diwariskan, yang berarti bahwa metode yang dilindungi pada jenis yang disegel tidak dapat dipanggil.
CA1050: Deklarasikan jenis di namespace Jenis dideklarasikan dalam namespace untuk mencegah benturan nama dan sebagai cara untuk mengatur jenis terkait dalam hierarki objek.
CA1051: Jangan nyatakan bidang instans yang terlihat Penggunaan utama bidang harus sebagai detail penerapan. Bidang harus privat atau internal dan harus diperlihatkan dengan menggunakan properti.
CA1052: Jenis pemegang statik harus disegel Jenis publik atau yang dilindungi hanya berisi anggota statik dan tidak dideklarasikan dengan menggunakan pemodifikasi yang disegel (Referensi C#) (NotInheritable). Jenis yang tidak dimaksudkan untuk diwariskan harus ditandai dengan menggunakan pemodifikasi yang disegel untuk mencegah penggunaannya sebagai jenis dasar.
CA1053: Jenis pemegang statik tidak boleh memiliki konstruktor Jenis publik atau publik berlapis hanya mendeklarasikan anggota statik dan memiliki konstruktor default publik atau yang dilindungi. Konstruktor tidak diperlukan karena memanggil anggota statik tidak memerlukan instans dari jenis tersebut. Overload string harus memanggil overload pengidentifikasi sumber daya seragam (URI) dengan menggunakan argumen string untuk keselamatan dan keamanan.
CA1054: Parameter URI tidak boleh berupa string Jika metode mengambil representasi string dari URI, overload yang sesuai harus disediakan yang mengambil instans dari kelas URI, yang menyediakan layanan ini dengan cara yang aman dan terjamin.
CA1055: Nilai pengembalian URI tidak boleh berupa string Aturan ini mengasumsikan bahwa metode mengembalikan URI. Representasi string URI rentan terhadap kesalahan penguraian dan pengodean, dan dapat menyebabkan kerentanan keamanan. Kelas System.Uri menyediakan layanan ini dengan cara yang aman dan terjamin.
CA1056: Properti URI tidak boleh berupa string Aturan ini mengasumsikan bahwa properti mewakili Pengidentifikasi Sumber Daya Seragam (URI). Representasi string URI rentan terhadap kesalahan penguraian dan pengodean, dan dapat menyebabkan kerentanan keamanan. Kelas System.Uri menyediakan layanan ini dengan cara yang aman dan terjamin.
CA1058: Tipe tidak boleh memperluas tipe dasar tertentu Jenis yang terlihat secara eksternal memperluas jenis dasar tertentu. Gunakan salah satu alternatif.
CA1060: Pindahkan P/Invokes ke kelas NativeMethods Metode pemanggilan platform, seperti yang ditandai dengan menggunakan atribut System.Runtime.InteropServices.DllImportAttribute, atau metode yang ditentukan dengan menggunakan kata kunci Declare di Visual Basic, mengakses kode tak terkelola. Metode ini harus dari kelas NativeMethods, SafeNativeMethods, atau UnsafeNativeMethods.
CA1061: Jangan sembunyikan metode kelas dasar Metode dalam jenis dasar disembunyikan oleh metode dengan nama yang sama dalam jenis turunan, ketika tanda tangan parameter dari metode turunan hanya berbeda berdasarkan jenis yang diturunkan lebih lemah daripada jenis yang sesuai dalam tanda tangan parameter dari metode dasar.
CA1062: Validasi argumen metode publik Semua argumen referensi yang diteruskan ke metode yang terlihat secara eksternal harus diperiksa terhadap null.
CA1063: Terapkan IDisposable dengan benar Semua jenis IDisposable harus menerapkan pola Buang dengan benar.
CA1064: Pengecualian harus bersifat publik Pengecualian internal hanya terlihat di dalam cakupan internalnya sendiri. Setelah pengecualian berada di luar cakupan internal, hanya pengecualian dasar yang dapat digunakan untuk menangkap pengecualian. Jika pengecualian internal diwarisi dari Exception, SystemException, atau ApplicationException, kode eksternal tidak akan memiliki informasi yang cukup untuk mengetahui apa yang harus dilakukan dengan pengecualian tersebut.
CA1065: Jangan munculkan pengecualian di lokasi yang tidak terduga Metode yang tidak diharapkan untuk memunculkan pengecualian akan memunculkan pengecualian.
CA1066: Menerapkan IEquatable saat mengganti Sama Dengan Jenis nilai menggantikan metode Equals, tetapi tidak menerapkan IEquatable<T>.
CA1067: Mengganti Sama Dengan saat menerapkan IEquatable Jenis menerapkan IEquatable<T>, tetapi tidak mengganti metode Equals.
CA1068: Parameter CancellationToken harus menjadi yang terakhir Metode memiliki parameter CancellationToken yang bukan merupakan parameter terakhir.
CA1069: Enum tidak boleh memiliki nilai duplikat Enumerasi memiliki beberapa anggota yang secara eksplisit diberi nilai konstanta yang sama.
CA1070: Jangan deklarasikan bidang peristiwa sebagai virtual Peristiwa seperti bidang dideklarasikan sebagai virtual.
CA1200: Hindari menggunakan tag cref dengan prefiks Atribut cref dalam tag dokumentasi XML berarti "referensi kode". Atribut ini menentukan bahwa teks bagian dalam dari tag adalah elemen kode, seperti jenis, metode, atau properti. Hindari menggunakan tag cref dengan prefiks, karena mencegah kompilator memverifikasi referensi. Ini juga mencegah integrated development environment (IDE) Visual Studio dari menemukan dan memperbarui referensi simbol ini selama refaktor.
CA1303: Jangan teruskan harfiah sebagai parameter yang dilokalkan Metode yang terlihat secara eksternal meneruskan harfiah string sebagai parameter ke konstruktor atau metode .NET, dan string tersebut harus dapat dilokalkan.
CA1304: Menentukan CultureInfo Metode atau konstruktor memanggil anggota yang memiliki overload yang menerima parameter System.Globalisasi.CultureInfo, dan metode atau konstruktor tidak memanggil overload yang menggunakan parameter CultureInfo. Saat objek CultureInfo atau System.IFormatProvider tidak diberikan, nilai default yang disediakan oleh anggota overload mungkin tidak memiliki efek yang Anda inginkan di semua lokal.
CA1305: Tentukan IFormatProvider Metode atau konstruktor memanggil satu atau beberapa anggota yang memiliki overload yang menerima parameter System.IFormatProvider, dan metode atau konstruktor tidak memanggil overload yang menggunakan parameter IFormatProvider. Ketika objek System.Globalisasi.CultureInfo atau IFormatProvider tidak diberikan, nilai default yang disediakan oleh anggota overload mungkin tidak memiliki efek yang Anda inginkan di semua lokal.
CA1307: Tentukan Perbandingan String untuk kejelasan Operasi perbandingan string menggunakan overload metode yang tidak menetapkan parameter StringComparison.
CA1308: Normalkan string menjadi huruf besar String harus dinormalisasi menjadi huruf besar. Grup kecil karakter tidak dapat melakukan perjalanan dua arah saat diubah menjadi huruf kecil.
CA1309: Gunakan Perbandingan String ordinal Operasi perbandingan string yang nonlinguistik tidak menetapkan parameter StringComparison ke Ordinal atau OrdinalIgnoreCase. Dengan mengatur parameter secara eksplisit ke StringComparison.Ordinal atau StringComparison.OrdinalIgnoreCase, kode Anda sering kali bertambah cepat, menjadi lebih benar, dan menjadi lebih andal.
CA1310: Tentukan Perbandingan String untuk ketepatan Operasi perbandingan string menggunakan overload metode yang tidak menetapkan parameter StringComparison dan menggunakan perbandingan string khusus budaya secara default.
CA1311: Tentukan budaya atau gunakan versi invarian Tentukan budaya atau gunakan budaya yang invarian untuk menghindari dependensi implisit pada budaya saat ini saat memanggil ToUpper atau ToLower.
CA1401: P/Invoke tidak boleh terlihat Metode publik atau terlindungi dalam jenis publik memiliki atribut System.Runtime.InteropServices.DllImportAttribute (juga diterapkan oleh kata kunci Deklarasi di Visual Basic). Metode seperti itu tidak boleh diperlihatkan.
CA1416: Validasi kompatibilitas platform Menggunakan API yang bergantung pada platform pada komponen membuat kode tidak lagi berfungsi di semua platform.
CA1417: Jangan gunakan OutAttribute pada parameter string untuk P/Invokes Parameter string yang diteruskan oleh nilai dengan OutAttribute dapat mengacaukan runtime jika string adalah string interned.
CA1418: Gunakan string platform yang valid Penganalisis kompatibilitas platform memerlukan nama dan versi platform yang valid.
CA1419: Sediakan konstruktor tanpa parameter yang terlihat seperti jenis yang disimpan untuk jenis konkret yang diturunkan dari 'System.Runtime.InteropServices.SafeHandle' Menyediakan konstruktor tanpa parameter yang terlihat seperti jenis yang disimpan untuk jenis yang diturunkan dari System.Runtime.InteropServices.SafeHandle memungkinkan performa dan penggunaan yang lebih baik dengan solusi interop yang dihasilkan sumber.
CA1420: Properti, jenis, atau atribut memerlukan marshalling runtime Menggunakan fitur yang memerlukan marshalling runtime saat marshalling runtime dinonaktifkan akan mengakibatkan pengecualian run-time.
CA1421: Metode menggunakan marshalling runtime saat DisableRuntimeMarshallingAttribute diterapkan Metode menggunakan marshalling runtime, dan marshalling runtime dinonaktifkan secara eksplisit.
CA1422: Memvalidasi kompatibilitas platform Memanggil API yang usang dalam OS (versi) tertentu dari situs panggilan yang dapat dijangkau dari OS (versi) tersebut tidak disarankan.
CA1501: Hindari warisan yang berlebihan Jenis lebih dari empat tingkat jauh di dalam hierarki warisan jenis. Hierarki jenis yang sangat berlapis dapat menjadi sulit untuk diikuti, dipahami, dan dipelihara.
CA1502: Hindari kerumitan yang berlebihan Aturan ini mengukur jumlah jalur independen linier melalui metode, yang ditentukan oleh jumlah dan kompleksitas cabang kondisional.
CA1505: Hindari kode yang tidak dapat dipelihara Jenis atau metode memiliki nilai indeks pemeliharaan yang rendah. Indeks pemeliharaan yang rendah menunjukkan bahwa jenis atau metode mungkin sulit untuk dipelihara dan akan menjadi kandidat yang baik untuk desain ulang.
CA1506: Hindari penggabungan kelas yang berlebihan Aturan ini mengukur penggabungan kelas dengan menghitung jumlah referensi jenis unik yang berisi jenis atau metode.
CA1507: Gunakan nameof sebagai pengganti string Harfiah string digunakan sebagai argumen di mana ekspresi nameof dapat digunakan.
CA1508: Hindari kode kondisional yang tidak digunakan Metode memiliki kode kondisional yang selalu mengevaluasi ke true atau false pada saat durasi. Ini mengarah ke kode yang tidak digunakan di cabang false dari kondisi tersebut.
CA1509: Entri tidak valid dalam file konfigurasi metrik kode Aturan metrik kode, seperti CA1501, CA1502, CA1505, dan CA1506, menyediakan file konfigurasi bernama CodeMetricsConfig.txt yang memiliki entri tidak valid.
CA1510: Gunakan pembantu lempar argumenNullException Pembantu lemparan lebih sederhana dan lebih efisien daripada if blok yang membangun instans pengecualian baru.
CA1511: Gunakan pembantu lempar ArgumentException Pembantu lemparan lebih sederhana dan lebih efisien daripada if blok yang membangun instans pengecualian baru.
CA1512: Gunakan pembantu lempar argumenOutOfRangeException Pembantu lemparan lebih sederhana dan lebih efisien daripada if blok yang membangun instans pengecualian baru.
CA1513: Gunakan objectDisposedException throw helper Pembantu lemparan lebih sederhana dan lebih efisien daripada if blok yang membangun instans pengecualian baru.
CA1514: Hindari argumen panjang berlebihan Argumen panjang redundan digunakan saat mengiris ke akhir string atau buffer. Panjang yang dihitung dapat rawan kesalahan dan juga tidak perlu.
CA1515: Pertimbangkan untuk membuat jenis publik internal Tidak seperti pustaka kelas, API aplikasi biasanya tidak direferensikan secara publik, sehingga jenis dapat ditandai internal.
CA1700: Jangan beri nama nilai enum 'Reserved' Aturan ini mengasumsikan bahwa anggota enumerasi yang memiliki nama yang berisi "reserved" saat ini tidak digunakan tetapi merupakan tempat penampung yang akan diganti namanya atau dihapus di versi mendatang. Mengganti nama atau menghapus anggota adalah perubahan yang melanggar.
CA1707: Pengidentifikasi tidak boleh berisi garis bawah Berdasarkan konvensi, nama pengidentifikasi tidak berisi karakter garis bawah (_). Aturan ini memeriksa namespace, jenis, anggota, dan parameter.
CA1708: Pengidentifikasi harus berbeda dengan lebih dari kasus Pengidentifikasi untuk namespace, jenis, anggota, dan parameter tidak dapat berbeda hanya berdasarkan huruf besar/kecil karena bahasa yang menargetkan runtime bahasa umum tidak perlu peka huruf besar/kecil.
CA1710: Pengidentifikasi harus memiliki sufiks yang benar Berdasarkan konvensi, nama jenis yang memperluas jenis dasar tertentu atau yang menerapkan antarmuka tertentu, atau jenis yang diturunkan dari jenis ini, memiliki sufiks yang dikaitkan dengan jenis dasar atau antarmuka.
CA1711: Pengidentifikasi tidak boleh memiliki sufiks yang salah Berdasarkan konvensi, hanya nama jenis yang memperluas jenis dasar tertentu atau yang menerapkan antarmuka tertentu, atau jenis yang diturunkan dari jenis ini, yang harus diakhiri dengan sufiks khusus yang dicadangkan. Nama jenis lain tidak boleh menggunakan sufiks yang dicadangkan ini.
CA1712: Jangan awali nilai enum dengan nama jenis Nama anggota enumerasi tidak diawali dengan menggunakan nama jenis karena alat pengembangan diharapkan memberikan informasi jenis.
CA1713: Peristiwa tidak boleh dimiliki sebelum atau sesudah prefiks Nama peristiwa dimulai dengan "Sebelum" atau "Setelah". Untuk memberi nama peristiwa terkait yang dimunculkan dalam urutan tertentu, gunakan present atau past tense untuk menunjukkan posisi relatif dalam urutan tindakan.
CA1714: Bendera enum harus memiliki nama jamak Enumerasi publik memiliki atribut System.FlagsAttribute, dan namanya tidak diakhiri dengan "s". Jenis yang ditandai dengan menggunakan FlagsAttribute memiliki nama yang jamak karena atribut menunjukkan bahwa lebih dari satu nilai dapat ditentukan.
CA1715: Pengidentifikasi harus memiliki awalan yang benar Nama antarmuka yang terlihat secara eksternal tidak dimulai dengan huruf besar "I". Nama parameter jenis generik pada jenis atau metode yang terlihat secara eksternal tidak dimulai dengan huruf besar "T".
CA1716: Pengidentifikasi tidak boleh cocok dengan kata kunci Nama namespace atau nama jenis cocok dengan kata kunci yang dicadangkan dalam bahasa pemrogram. Pengidentifikasi untuk namespace dan jenis tidak boleh cocok dengan kata kunci yang ditentukan oleh bahasa yang menargetkan runtime bahasa umum.
CA1717: Hanya enum FlagsAttribute yang boleh memiliki nama jamak Konvensi penamaan menentukan bahwa nama jamak untuk enumerasi menunjukkan bahwa lebih dari satu nilai enumerasi dapat ditentukan pada waktu yang sama.
CA1720: Pengidentifikasi tidak boleh berisi nama jenis Nama parameter dalam anggota yang terlihat secara eksternal berisi nama jenis data, atau nama anggota yang terlihat secara eksternal berisi nama jenis data khusus bahasa.
CA1721: Nama properti tidak boleh cocok dengan metode get Nama anggota publik atau yang dilindungi dimulai dengan "Get" dan, atau cocok dengan nama properti publik atau yang dilindungi. Metode dan properti "Get" harus memiliki nama yang membedakan fungsinya dengan jelas.
CA1724: Nama Jenis Tidak Boleh Cocok dengan Namespace Nama jenis tidak boleh cocok dengan nama namespace .NET. Melanggar aturan ini dapat mengurangi kegunaan pustaka.
CA1725: Nama parameter harus cocok dengan deklarasi dasar Penamaan parameter yang konsisten dalam hierarki penggantian meningkatkan kegunaan pengantian metode. Nama parameter dalam metode turunan yang berbeda dari nama dalam deklarasi dasar dapat menyebabkan kebingungan tentang apakah metode tersebut merupakan penggantian metode dasar atau overload baru metode tersebut.
CA1727: Gunakan PascalCase untuk tempat penampung bernama Gunakan PascalCase untuk tempat penampung bernama di template pesan pengelogan.
CA1801: Meninjau parameter yang tidak digunakan Tanda tangan metode menyertakan parameter yang tidak digunakan di isi metode.
CA1802: Gunakan Harfiah Jika Sesuai Bidang dideklarasikan statik dan baca-saja (Dibagikan dan ReadOnly di Visual Basic), dan diinisialisasi dengan menggunakan nilai yang dapat dihitung pada waktu kompilasi. Karena nilai yang ditetapkan ke bidang yang ditargetkan dapat dihitung pada waktu kompilasi, ubah deklarasi menjadi bidang const (Const dalam Visual Basic) sehingga nilai dihitung pada waktu kompilasi, bukan saat durasi.
CA1805: Jangan inisialisasi yang tidak perlu Runtime .NET menginisialisasi semua bidang jenis referensi ke nilai defaultnya sebelum menjalankan konstruktor. Dalam kebanyakan kasus, secara eksplisit menginisialisasi bidang ke nilai defaultnya berlebihan, yang menambah biaya pemeliharaan dan mungkin menurunkan performa (seperti dengan peningkatan ukuran rakitan).
CA1806: Jangan abaikan hasil metode Objek baru dibuat tetapi tidak pernah digunakan; atau metode yang membuat dan mengembalikan string baru dipanggil dan string baru tidak pernah digunakan; atau metode COM atau P/Invoke mengembalikan HRESULT atau kode galat yang tidak pernah digunakan.
CA1810: Inisialisasi bidang statik jenis referensi sebaris Ketika jenis mendeklarasikan konstruktor statik eksplisit, kompilator just-in-time (JIT) menambahkan tanda centang ke setiap metode statik dan konstruktor instans dari jenis tersebut untuk memastikan bahwa konstruktor statik telah dipanggil sebelumnya. Pemeriksaan konstruktor statik dapat menurunkan performa.
CA1812: Menghindari kelas internal yang tidak dibuat instansnya Instans dari jenis tingkat rakitan tidak dibuat oleh kode di rakitan.
CA1813: Hindari atribut yang tidak disegel .NET menyediakan metode untuk mengambil atribut kustom. Secara default, metode ini mencari hierarki warisan atribut. Menyegel atribut menghilangkan pencarian melalui hierarki warisan dan dapat meningkatkan performa.
CA1814: Lebih baik gunakan array berjajar daripada multidimensi Larik bergerigi adalah larik yang elemen-elemennya adalah larik. Larik yang membentuk elemen dapat memiliki ukuran yang berbeda, sehingga mengurangi ruang yang terbuang untuk beberapa kumpulan data.
CA1815: Ganti sama dengan dan sama dengan operator pada jenis nilai Untuk jenis nilai, penerapan Sama Dengan yang diwarisikan menggunakan pustaka Refleksi dan membandingkan konten semua bidang. Refleksi memerlukan biaya komputasi yang mahal, dan membandingkan setiap bidang untuk kesetaraan mungkin tidak perlu. Jika Anda mengharapkan pengguna untuk membandingkan atau mengurutkan instans, atau menggunakan instans sebagai kunci tabel hash, jenis nilai Anda harus menerapkan Sama Dengan.
CA1816: Panggil GC.SuppressFinalize dengan benar Metode yang merupakan penerapan dari Buang tidak memanggil GC.SuppressFinalize; atau metode yang bukan merupakan penerapan dari panggilan Buang GC.SuppressFinalize; atau metode memanggil GC.SuppressFinalize dan meneruskan sesuatu selain ini (Me dalam Visual Basic).
CA1819: Properti tidak boleh mengembalikan larik Larik yang dikembalikan oleh properti tidak dilindungi dari penulisan, meskipun properti tersebut baca-saja. Untuk menjaga agar larik tidak rusak, properti harus mengembalikan salinan larik. Biasanya, pengguna tidak akan memahami implikasi performa yang merugikan dari panggilan properti semacam itu.
CA1820: Uji string kosong menggunakan panjang string Membandingkan string dengan menggunakan properti String.Length atau metode String.IsNullOrEmpty secara signifikan lebih cepat daripada menggunakan Sama Dengan.
CA1821: Hapus penyelesai kosong Jika perlu, hindari penyelesai karena biaya performa tambahan yang terlibat dalam melacak masa pakai objek. Penyelesai kosong menimbulkan biaya tambahan dan tidak memberikan keuntungan.
CA1822: Tandai anggota sebagai statik Anggota yang tidak mengakses data instans atau memanggil metode instans dapat ditandai sebagai statik (Dibagikan dalam Visual Basic). Setelah Anda menandai metode sebagai statik, kompilator akan memancarkan situs panggilan nonvirtual ke anggota ini. Hal ini dapat memberi Anda peningkatan performa yang terukur untuk kode yang sensitif terhadap performa.
CA1823: Hindari bidang privat yang tidak digunakan Bidang privat terdeteksi yang tampaknya tidak dapat diakses di rakitan.
CA1824: Tandai rakitan dengan NeutralResourcesLanguageAttribute Atribut NeutralResourcesLanguage menginformasikan manajer sumber daya bahasa yang digunakan untuk menampilkan sumber daya budaya netral untuk rakitan. Ini meningkatkan performa pencarian untuk sumber daya pertama yang Anda muat dan dapat mengurangi rangkaian pekerjaan Anda.
CA1825: Hindari alokasi larik zero-length Menginisialisasi larik zero-length menyebabkan alokasi memori yang tidak perlu. Sebagai gantinya, gunakan instans larik kosong yang dialokasikan secara statik dengan memanggil Array.Empty. Alokasi memori dibagikan di semua pemanggilan metode ini.
CA1826: Gunakan properti, bukan metode Linq Enumerable Metode LINQ Enumerable digunakan pada jenis yang mendukung properti yang setara dan lebih efisien.
CA1827: Jangan gunakan Count/LongCount jika Any dapat digunakan Metode Count atau LongCount digunakan di mana metode Any akan lebih efisien.
CA1828: Jangan gunakan CountAsync/LongCountAsync saat AnyAsync dapat digunakan Metode CountAsync atau LongCountAsync digunakan di mana metode AnyAsync akan lebih efisien.
CA1829: Gunakan properti Length/Count alih-alih metode Enumerable.Count Metode LINQ Count digunakan pada jenis yang mendukung properti Length atau Count yang setara dan lebih efisien.
CA1830: Gunakan metode Tambahkan dan Sisipkan yang diketik dengan kuat di StringBuilder Append dan Insert memberikan kelebihan muatan untuk beberapa jenis di luar String. Jika memungkinkan, pilih overload yang diketik dengan kuat daripada menggunakan ToString() dan overload berbasis string.
CA1831: Gunakan AsSpan alih-alih pengindeks berbasis Rentang untuk string jika sesuai Saat menggunakan pengindeks rentang pada string dan secara implisit menetapkan nilai ke jenis ReadOnlySpan<char>, metode Substring akan digunakan sebagai ganti Slice, yang menghasilkan salinan bagian string yang diminta.
CA1832: Gunakan AsSpan atau AsMemory, bukan pengindeks berbasis Rentang untuk mendapatkan bagian ReadOnlySpan atau ReadOnlyMemory dari larik Saat menggunakan pengindeks rentang pada larik dan secara implisit menetapkan nilai ke jenis ReadOnlySpan<T> atau ReadOnlyMemory<T>, metode GetSubArray akan digunakan sebagai ganti Slice, yang menghasilkan salinan bagian larik yang diminta.
CA1833: Gunakan AsSpan atau AsMemory daripada pengindeks berbasis Rentang untuk mendapatkan bagian Rentang atau Memori dari array Saat menggunakan pengindeks rentang pada larik dan secara implisit menetapkan nilai ke jenis Span<T> atau Memory<T>, metode GetSubArray akan digunakan sebagai ganti Slice, yang menghasilkan salinan bagian larik yang diminta.
CA1834: Gunakan StringBuilder.Append(char) untuk string karakter tunggal StringBuilder memiliki overload Append yang menggunakan char sebagai argumennya. Sebaiknya memanggil overload char karena alasan performa.
CA1835: Lebih baik gunakan overload berbasis 'Memori' untuk 'ReadAsync' dan 'WriteAsync' 'Stream' memiliki overload 'ReadAsync' yang menggunakan 'Memory<Byte>' sebagai argumen pertama, dan overload 'WriteAsync' yang menggunakan 'ReadOnlyMemory<Byte>' sebagai argumen pertama. Lebih baik memanggil overload berbasis memori, yang lebih efisien.
CA1836: Pilih IsEmpty daripada Count jika tersedia Pilih properti IsEmpty yang lebih efisien daripada Count, Length, Count<TSource>(IEnumerable<TSource>), atau LongCount<TSource>(IEnumerable<TSource>) untuk menentukan apakah objek berisi item atau tidak.
CA1837: Gunakan Environment.ProcessId, bukan Process.GetCurrentProcess().Id Environment.ProcessId lebih sederhana dan lebih cepat daripada Process.GetCurrentProcess().Id.
CA1838: Hindari parameter StringBuilder untuk P/Invokes Penyusunan 'StringBuilder' selalu membuat salinan buffer asli, menghasilkan beberapa alokasi untuk satu operasi penyusunan.
CA1839: Gunakan Environment.ProcessPath, bukan Process.GetCurrentProcess().MainModule.FileName Environment.ProcessPath lebih sederhana dan lebih cepat daripada Process.GetCurrentProcess().MainModule.FileName.
CA1840: Gunakan Environment.CurrentManagedThreadId bukan Thread.CurrentThread.ManagedThreadId Environment.CurrentManagedThreadId lebih ringkas dan efisien daripada Thread.CurrentThread.ManagedThreadId.
CA1841: Kamus Pilihan Berisi metode Memanggil Contains pada koleksi atau Values mungkin sering lebih mahal daripada memanggil ContainsKey atau ContainsValue pada kamus Keys itu sendiri.
CA1842: Jangan gunakan 'WhenAll' dengan satu tugas Menggunakan WhenAll dengan satu tugas dapat mengakibatkan kehilangan performa. Tunggu atau kembalikan tugas sebagai gantinya.
CA1843: Jangan gunakan 'WaitAll' dengan satu tugas Menggunakan WaitAll dengan satu tugas dapat mengakibatkan kehilangan performa. Tunggu atau kembalikan tugas sebagai gantinya.
CA1844: Memberikan penggantian metode asinkron berbasis memori saat membuat subkelas 'Stream' Untuk meningkatkan performa, ganti metode asinkron berbasis memori saat membuat subkelas 'Stream'. Kemudian terapkan metode berbasis larik dalam hal metode berbasis memori.
CA1845: Gunakan 'string.Concat' berbasis rentang Lebih efisien menggunakan AsSpan dan string.Concat, daripada Substring dan operator perangkaian.
CA1846: Lebih baik gunakan AsSpan daripada Substring AsSpan lebih efisien daripada Substring. Substring melakukan salinan string O(n), sedangkan AsSpan tidak dan memiliki biaya yang konstan. AsSpan juga tidak melakukan alokasi tumpukan apa pun.
CA1847: Gunakan harfiah char untuk pencarian karakter tunggal Gunakan string.Contains(char), bukan string.Contains(string) saat mencari satu karakter.
CA1848: Gunakan delegasi LoggerMessage Untuk meningkatkan performa, gunakan delegasi LoggerMessage.
CA1849: Panggil metode asinkron saat dalam metode asinkron Dalam metode yang sudah asinkron, panggilan ke metode lain harus ke versi asinkron metode, jika ada.
CA1850: Lebih baik gunakan metode HashData statik daripada ComputeHash Lebih efisien menggunakan metode HashData statik daripada membuat dan mengelola instans HashAlgorithm untuk memanggil ComputeHash.
CA1851: Kemungkinan beberapa enumerasi dari kumpulan IEnumerable Kemungkinan beberapa enumerasi kumpulan IEnumerable. Pertimbangkan untuk menggunakan penerapan yang menghindari beberapa enumerasi.
CA1852: Segel jenis internal Jenis yang tidak dapat diakses di luar rakitannya dan tidak memiliki subjenis dalam assembly yang berisi tidak disegel.
CA1853: Panggilan yang tidak perlu ke 'Dictionary.ContainsKey(key)' Tidak perlu menjaga Dictionary.Remove(key) dengan Dictionary.ContainsKey(key). Dictionary<TKey,TValue>.Remove(TKey) sudah memeriksa apakah kunci ada dan tidak melemparkan jika tidak ada.
CA1854: Lebih baik gunakan metode 'IDictionary.TryGetValue(TKey, out TValue)' Lebih baik gunakan 'TryGetValue' daripada akses pengindeks Kamus yang dijaga oleh centang 'ContainsKey'. 'ContainsKey' dan pengindeks keduanya mencari kunci, jadi menggunakan 'TryGetValue' menghindari pencarian tambahan.
CA1855: Gunakan Rentang<T>. Clear() alih-alih Span<T>. Fill() Lebih efisien untuk memanggil Span<T>.Clear() daripada memanggil Span<T>.Fill(T) untuk mengisi elemen rentang dengan nilai default.
CA1856: Penggunaan atribut ConstantExpected salah Atribut ConstantExpectedAttribute tidak diterapkan dengan benar pada parameter.
CA1857: Parameter mengharapkan konstanta untuk performa optimal Argumen yang tidak valid diteruskan ke parameter yang dianotasi dengan ConstantExpectedAttribute.
CA1858: Gunakan StartsWith alih-alih IndexOf Lebih efisien untuk memanggil String.StartsWith daripada memanggil String.IndexOf untuk memeriksa apakah string dimulai dengan awalan tertentu.
CA1859: Gunakan jenis beton jika memungkinkan untuk meningkatkan performa Kode menggunakan jenis antarmuka atau jenis abstrak, yang mengarah ke panggilan antarmuka atau panggilan virtual yang tidak perlu.
CA1860: Hindari menggunakan metode ekstensi 'Enumerable.Any()' Lebih efisien dan lebih jelas untuk menggunakan Length, , Countatau IsEmpty (jika memungkinkan) daripada memanggil Enumerable.Any untuk menentukan apakah jenis koleksi memiliki elemen apa pun.
CA1861: Hindari array konstanta sebagai argumen Array konstanta yang diteruskan sebagai argumen tidak digunakan kembali yang menyiratkan overhead performa. Pertimbangkan untuk mengekstraknya ke bidang 'readonly statis' untuk meningkatkan performa.
CA1862: Gunakan metode 'Perbandingan String' kelebihan beban untuk melakukan perbandingan string yang tidak peka huruf besar/kecil Saat kode memanggil ToLower() atau ToUpper() untuk melakukan perbandingan string yang tidak peka huruf besar/kecil, alokasi yang tidak perlu dilakukan.
CA1863: Gunakan 'CompositeFormat' Untuk mengurangi biaya pemformatan, cache dan gunakan CompositeFormat instans sebagai argumen ke String.Format atau StringBuilder.AppendFormat.
CA1864: Lebih suka metode 'IDictionary.TryAdd(TKey, TValue)' Baik Dictionary<TKey,TValue>.ContainsKey(TKey) dan Dictionary<TKey,TValue>.Add lakukan pencarian, yang berlebihan. Lebih efisien untuk memanggil Dictionary<TKey,TValue>.TryAdd, yang mengembalikan bool indikasi apakah nilai ditambahkan atau tidak. TryAdd tidak menimpa nilai kunci jika kunci sudah ada.
CA1865-CA1867: Gunakan char overload Kelebihan karakter adalah kelebihan beban berkinerja lebih baik untuk string dengan satu karakter.
CA1868: Panggilan yang tidak perlu ke 'Berisi' untuk set Baik ISet<T>.Add(T) dan ICollection<T>.Remove(T) lakukan pencarian, yang membuatnya berlebihan untuk memanggil ICollection<T>.Contains(T) sebelumnya. Lebih efisien untuk memanggil Add(T) atau Remove(T) secara langsung, yang mengembalikan nilai Boolean yang menunjukkan apakah item ditambahkan atau dihapus.
CA1869: Cache dan gunakan kembali instans 'JsonSerializerOptions' Menggunakan instans JsonSerializerOptions lokal untuk serialisasi atau deserialisasi dapat secara substansial menurunkan performa aplikasi Anda jika kode Anda dijalankan beberapa kali, karena System.Text.Json secara internal menyimpan metadata terkait serialisasi ke dalam instans yang disediakan.
CA1870: Gunakan instans 'SearchValues' yang di-cache Menggunakan instans cache SearchValues<T> lebih efisien daripada meneruskan nilai ke 'IndexOfAny' atau 'ContainsAny' secara langsung.
CA1871: Jangan berikan struct nullable ke 'ArgumentNullException.ThrowIfNull' 'ArgumentNullException.ThrowIfNull' menerima 'objek', jadi meneruskan struct nullable dapat menyebabkan nilai dikotak.
CA1872: Lebih suka 'Convert.ToHexString' dan 'Convert.ToHexStringLower' daripada rantai panggilan berdasarkan 'BitConverter.ToString' Gunakan Convert.ToHexString atau Convert.ToHexStringLower saat mengodekan byte ke representasi string heksadesimal. Metode ini lebih efisien dan ramah alokasi daripada menggunakan BitConverter.ToString dalam kombinasi dengan String.Replace untuk mengganti tanda hubung dan String.ToLower.
CA2000: Membuang objek sebelum kehilangan cakupan Karena peristiwa pengecualian mungkin terjadi yang akan mencegah penyelesai objek berjalan, objek harus dibuang secara eksplisit sebelum semua referensi ke objek keluar dari cakupan.
CA2002: Jangan kunci objek dengan identitas lemah Objek dikatakan memiliki identitas yang lemah ketika dapat diakses secara langsung di seluruh batas-batas domain aplikasi. Alur yang mencoba mendapatkan kunci pada objek yang memiliki identitas lemah dapat diblokir oleh alur kedua di domain aplikasi berbeda yang memiliki kunci pada objek yang sama.
CA2007: Jangan langsung menunggu Tugas Metode asinkron menungguTask secara langsung. Saat metode asinkron menunggu Task secara langsung, kelanjutan terjadi di alur yang sama yang membuat tugas. Perilaku ini dapat menjadi mahal dalam hal performa dan dapat mengakibatkan kebuntuan pada alur antarmuka pengguna. Pertimbangkan memanggil Task.ConfigureAwait(Boolean) untuk menandakan niat Anda untuk melanjutkan.
CA2008: Jangan buat tugas tanpa meneruskan TaskScheduler Pembuatan tugas atau operasi kelanjutan menggunakan overload metode yang tidak menentukan parameter TaskScheduler.
CA2009: Jangan panggil ToImmutableCollection pada nilai ImmutableCollection Metode ToImmutable tidak perlu dipanggil pada koleksi yang tidak dapat diubah dari namespace layanan System.Collections.Immutable.
CA2011: Jangan tetapkan properti di dalam pengaturan properti Properti secara tidak sengaja diberi nilai dalam pengakses kumpulan properti itu sendiri.
CA2012: Gunakan ValueTasks dengan benar ValueTasks yang dikembalikan dari pemanggilan anggota dimaksudkan untuk ditunggu secara langsung. Upaya untuk menggunakan ValueTask beberapa kali atau untuk langsung mengakses hasil seseorang sebelum diketahui selesai dapat mengakibatkan pengecualian atau kerusakan. Mengabaikan ValueTask seperti itu kemungkinan merupakan indikasi bug fungsi dan mungkin menurunkan performa.
CA2013: Jangan gunakan ReferenceEquals dengan jenis nilai Saat membandingkan nilai menggunakan System.Object.ReferenceEquals, jika objA dan objB adalah jenis nilai, keduanya diberi kotak sebelum diteruskan ke metode ReferenceEquals. Ini berarti bahwa meskipun objA dan objB mewakili instans jenis nilai yang sama, metode ReferenceEquals tetap menampilkan false.
CA2014: Jangan gunakan stackalloc dalam perulangan. Ruang tumpukan yang dialokasikan oleh stackalloc hanya dirilis di akhir pemanggilan metode saat ini. Menggunakannya dalam perulangan dapat menghasilkan pertumbuhan tumpukan yang tidak terbatas dan mengakibatkan kondisi luapan tumpukan.
CA2015: Jangan tentukan penyelesai untuk jenis yang diturunkan dari MemoryManager<T> Menambahkan finalizer ke jenis yang berasal dari MemoryManager<T> mungkin mengizinkan memori dibebaskan saat masih digunakan oleh Span<T>.
CA2016: Teruskan parameter CancellationToken ke metode yang menggunakan parameter tersebut Teruskan parameter CancellationToken ke metode yang menggunakan parameter tersebut untuk memastikan pemberitahuan pembatalan operasi disebarkan dengan benar, atau teruskan CancellationToken.None secara eksplisit untuk menunjukkan bahwa token tidak disebarkan dengan sengaja.
CA2017: Jumlah parameter tidak cocok Jumlah parameter yang disediakan di template pesan pengelogan tidak cocok dengan jumlah tempat penampung bernama.
CA2018: Argumen count ke Buffer.BlockCopy harus menentukan jumlah byte yang akan disalin Saat menggunakan Buffer.BlockCopy, argumen count menentukan jumlah byte yang akan disalin. Anda hanya boleh menggunakan Array.Length untuk argumen count pada larik yang elemennya berukuran tepat satu byte. Larik byte, sbyte, dan bool memiliki elemen berukuran satu byte.
CA2019: ThreadStatic bidang tidak boleh menggunakan inisialisasi sebaris Bidang yang dianotasikan dengan ThreadStaticAttribute diinisialisasi sebaris atau secara eksplisit dalam static konstruktor (Shared di Visual Basic).
CA2020: Mencegah perubahan perilaku yang disebabkan oleh operator bawaan IntPtr/UIntPtr Beberapa operator bawaan yang ditambahkan di .NET 7 bereaksi berbeda dari operator yang ditentukan pengguna di .NET 6 dan versi yang lebih lama. Beberapa operator yang digunakan untuk melemparkan dalam konteks yang tidak dicentang saat meluap tidak meluap lagi kecuali dibungkus dalam konteks yang diperiksa. Beberapa operator yang sebelumnya tidak memberikan konteks yang diperiksa sekarang dilemparkan kecuali dibungkus dalam konteks yang tidak dicentang.
CA2021: Jangan panggil Enumerable.Cast<T> atau Enumerable.OfType<T> dengan jenis yang tidak kompatibel Panggilan ke Enumerable.Cast<TResult>(IEnumerable) atau Enumerable.OfType<TResult>(IEnumerable) menentukan parameter jenis yang tidak kompatibel dengan jenis koleksi input.
CA2100: Tinjau kueri SQL untuk kerentanan keamanan Metode mengatur properti System.Data.IDbCommand.CommandText dengan menggunakan string yang dibuat dari argumen string ke metode. Aturan ini mengasumsikan bahwa argumen string berisi input pengguna. String perintah SQL yang dibuat dari input pengguna rentan terhadap serangan injeksi SQL.
CA2101: Tentukan penyusunan untuk argumen string P/Invoke Anggota pemanggil platform memungkinkan pemanggil tepercaya sebagian, memiliki parameter string, dan tidak secara eksplisit menyusun string. Hal ini dapat menyebabkan potensi kerentanan keamanan.
CA2109: Tinjau penanganan aktivitas yang terlihat Metode penanganan aktivitas publik atau yang dilindungi telah terdeteksi. Metode penanganan aktivitas tidak boleh diperlihatkan kecuali benar-benar diperlukan.
CA2119: Metode penyegelan yang memenuhi antarmuka privat Jenis publik yang dapat diwarisikan menyediakan penerapan metode yang dapat diganti dari antarmuka internal (Friend dalam Visual Basic). Untuk memperbaiki pelanggaran aturan ini, cegah metode agar tidak diganti di luar rakitan.
CA2153: Hindari menangani Pengecualian Status yang Rusak Pengecualian Status yang Rusak (CSEs) menunjukkan bahwa ada kerusakan memori dalam proses Anda. Menangkap ini daripada membiarkan proses mengalami crash dapat menyebabkan kerentanan keamanan jika penyerang dapat menempatkan eksploitasi ke wilayah memori yang rusak.
CA2200: Munculkan kembali untuk mempertahankan detail tumpukan Pengecualian dimunculkan kembali dan pengecualian secara eksplisit ditentukan dalam pernyataan kemunculan. Jika pengecualian dimunculkan kembali dengan menetapkan pengecualian dalam pernyataan kemunculan, daftar panggilan metode antara metode asli yang memunculkan pengecualian dan metode saat ini akan hilang.
CA2201: Jangan munculkan jenis pengecualian yang dicadangkan Ini membuat kesalahan asli sulit untuk dideteksi dan ditelusuri.
CA2207: Menginisialisasi bidang statik jenis nilai sebaris Jenis nilai mendeklarasikan konstruktor statik eksplisit. Untuk memperbaiki pelanggaran aturan ini, inisialisasi semua data statis saat dideklarasikan dan hapus konstruktor statik.
CA2208: Buat instans pengecualian argumen dengan benar Panggilan dilakukan ke konstruktor default (tanpa parameter) dari jenis pengecualian yang atau berasal dari ArgumentException, atau argumen string yang salah diteruskan ke konstruktor berparameter dari jenis pengecualian yang atau berasal dari ArgumentException.
CA2211: Bidang non-konstanta tidak boleh terlihat Bidang statik yang bukan konstanta atau baca-saja tidak aman untuk alur. Akses ke bidang seperti itu harus dikontrol dengan hati-hati dan memerlukan teknik pemrograman tingkat lanjut untuk menyinkronkan akses ke objek kelas.
CA2213: Bidang sekali pakai harus dibuang Jenis yang menerapkan System.IDisposable mendeklarasikan bidang yang merupakan jenis yang juga menerapkan IDisposable. Metode Buang bidang tidak dipanggil oleh metode Buang dari jenis yang mendeklarasikan.
CA2214: Jangan panggil metode yang dapat diganti dalam konstruktor Ketika konstruktor memanggil metode virtual, konstruktor untuk instans yang memanggil metode mungkin belum dijalankan.
CA2215: Metode Buang harus memanggil pembuangan kelas dasar Jika jenis mewarisi dari jenis sekali pakai, jenis harus memanggil metode Buang dari jenis dasar dari metode Buang jenis itu sendiri.
CA2216: Jenis sekali pakai harus mendeklarasikan finalis Jenis yang menerapkan System.IDisposable dan memiliki bidang yang menyarankan penggunaan sumber daya yang tidak dikelola tidak menerapkan penyelesai, seperti yang dijelaskan oleh Object.Finalize.
CA2217: Jangan tandai enum dengan FlagsAttribute Enumerasi yang terlihat secara eksternal ditandai dengan menggunakan FlagsAttribute, dan memiliki satu atau lebih nilai yang bukan pangkat dua atau kombinasi dari nilai yang ditentukan lainnya pada enumerasi.
CA2218: Ganti GetHashCode dengan mengganti Sama Dengan Jenis publik mengganti System.Object.Equals tetapi tidak mengganti System.Object.GetHashCode.
CA2219: Jangan munculkan pengecualian dalam klausul pengecualian Ketika pengecualian dimunculkan dalam klausul akhir atau kesalahan, pengecualian baru menyembunyikan pengecualian aktif. Ketika pengecualian dinaikkan dalam klausa filter, runtime secara diam-diam menangkap pengecualian. Ini membuat kesalahan asli sulit untuk dideteksi dan ditelusuri.
CA2224: Ganti sama dengan pada sama dengan operator overloading Jenis publik menerapkan operator kesetaraan tetapi tidak mengganti System.Object.Equals.
CA2225: Overload operator telah memberi nama alternatif Overload operator terdeteksi, dan metode alternatif bernama yang diharapkan tidak ditemukan. Anggota alternatif bernama menyediakan akses ke fungsionalitas yang sama dengan operator dan disediakan untuk pengembang yang memprogram dalam bahasa yang tidak mendukung operator overload.
CA2226: Operator harus memiliki overload simetris Jenis menerapkan operator kesetaraan atau ketidaksetaraan dan tidak menerapkan operator yang berlawanan.
CA2227: Properti kumpulan harus berupa baca saja Properti kumpulan bisa-tulis memungkinkan pengguna mengganti kumpulan dengan kumpulan yang berbeda. Properti baca-saja menghentikan kumpulan agar tidak diganti tetapi masih memungkinkan masing-masing anggota diatur.
CA2229: Menerapkan konstruktor serialisasi Untuk memperbaiki pelanggaran aturan ini, terapkan konstruktor serialisasi. Untuk kelas yang disegel, buat konstruktor menjadi privat; jika tidak, buat konstruktor menjadi terlindungi.
CA2231: Sama dengan operator overload dalam mengganti ValueType.Equals Jenis nilai mengganti Object.Equals tetapi tidak menerapkan operator kesetaraan.
CA2234: Meneruskan objek System.Uri bukan string Panggilan dibuat ke metode yang memiliki parameter string yang namanya berisi "uri", "URI", "urn", "URN", "url", atau "URL". Jenis yang mendeklarasikan metode berisi overload metode terkait yang memiliki parameter System.Uri.
CA2235: Tandai semua bidang yang tidak dapat dibuat serial Bidang instans dari jenis yang tidak dapat diserialisasikan dideklarasikan dalam jenis yang dapat diserialisasikan.
CA2237: Menandai jenis ISerializable dengan SerializableAttribute Agar dikenali oleh runtime bahasa umum sebagai dapat diserialisasikan, jenis harus ditandai dengan menggunakan atribut SerializableAttribute bahkan ketika jenis menggunakan rutin serialisasi kustom melalui penerapan antarmuka ISerializable.
CA2241: Memberikan argumen yang benar untuk metode pemformatan Argumen format yang diteruskan ke System.String.Format tidak berisi item format yang sesuai dengan setiap argumen objek, atau sebaliknya.
CA2242: Uji NaN dengan benar Ekspresi ini menguji nilai terhadap Single.Nan atau Double.Nan. Gunakan Single.IsNan(Single) atau Double.IsNan(Double) untuk menguji nilainya.
CA2243: Harfiah string atribut harus diurai dengan benar Parameter harfiah string atribut tidak diuraikan dengan benar untuk URL, GUID, atau versi.
CA2244: Jangan duplikasi inisialisasi elemen yang diindeks Penginisialisasi objek memiliki lebih dari satu penginisialisasi elemen terindeks dengan indeks konstanta yang sama. Semua kecuali penginisialisasi terakhir yang berlebihan.
CA2245: Jangan tetapkan properti untuk properti itu sendiri Properti secara tidak sengaja ditetapkan untuk properti itu sendiri.
CA2246: Jangan tetapkan simbol dan anggota simbol dalam pernyataan yang sama Menetapkan simbol dan anggota simbol, yaitu bidang atau properti, dalam pernyataan yang sama tidak disarankan. Tidak jelas apakah akses anggota dimaksudkan untuk menggunakan nilai lama simbol sebelum penetapan atau nilai baru dari penetapan dalam pernyataan ini.
CA2247: Argumen yang diteruskan ke konstruktor TaskCompletionSource harus berupa enum TaskCreationOptions, bukan enum TaskContinuationOptions. TaskCompletionSource memiliki konstruktor yang mengambil TaskCreationOptions yang mengontrol Tugas yang mendasari, dan konstruktor yang mengambil status objek yang disimpan dalam tugas. Secara tidak sengaja meneruskan TaskContinuationOptions, bukan TaskCreationOptions akan menghasilkan panggilan yang memperlakukan opsi sebagai status.
CA2248: Berikan argumen enum yang benar ke Enum.HasFlag Jenis enum yang diteruskan sebagai argumen ke panggilan metode HasFlag berbeda dari jenis enum panggilan.
CA2249: Pertimbangkan untuk menggunakan String.Contains daripada String.IndexOf Panggilan ke string.IndexOf yang hasilnya digunakan untuk memeriksa ada/tidaknya substring dapat diganti dengan string.Contains.
CA2250: Gunakan ThrowIfCancellationRequested ThrowIfCancellationRequested secara otomatis memeriksa apakah token telah dibatalkan, dan memunculkan OperationCanceledException jika dibatalkan.
CA2251: Gunakan String.Equals daripada String.Compare Lebih jelas dan mungkin lebih cepat menggunakan String.Equals daripada membandingkan hasil String.Compare dengan nol.
CA2252: Terima fitur pratinjau Menerima fitur pratinjau sebelum menggunakan API pratinjau.
CA2253: Tempat penampung bernama tidak boleh berupa nilai numerik Tempat penampung bernama dalam template pesan pengelogan tidak boleh terdiri dari karakter numerik saja.
CA2254: Template harus berupa ekspresi statik Template pesan pengelogan tidak boleh berbeda di antara panggilan.
CA2255: Atribut ModuleInitializer tidak boleh digunakan di pustaka Penginisialisasi modul dimaksudkan untuk digunakan oleh kode aplikasi untuk memastikan komponen aplikasi diinisialisasi sebelum kode aplikasi memulai eksekusi.
CA2256: Semua anggota yang dideklarasikan di antarmuka induk harus memiliki penerapan di antarmuka yang dikaitkan dengan DynamicInterfaceCastableImplementation Jenis yang dikaitkan dengan DynamicInterfaceCastableImplementationAttribute bertindak sebagai penerapan antarmuka untuk jenis yang menerapkan jenis IDynamicInterfaceCastable. Akibatnya, jenis tersebut harus menyediakan penerapan dari semua anggota yang ditentukan dalam antarmuka yang diwarisi, karena jenis yang menerapkan IDynamicInterfaceCastable tidak akan menyediakan anggota.
CA2257: Anggota yang ditentukan pada antarmuka dengan 'DynamicInterfaceCastableImplementationAttribute' harus 'statik' Karena jenis yang mengimplementasikan IDynamicInterfaceCastable mungkin tidak menerapkan antarmuka dinamis dalam metadata, panggilan ke anggota antarmuka instans yang bukan implementasi eksplisit yang ditentukan pada jenis ini kemungkinan gagal pada waktu proses. Tandai anggota antarmuka baru static untuk menghindari kesalahan run-time.
CA2258: Menyediakan antarmuka 'DynamicInterfaceCastableImplementation' di Visual Basic tidak didukung Menyediakan antarmuka yang dikaitkan dengan DynamicInterfaceCastableImplementationAttribute fungsional memerlukan fitur Anggota Antarmuka Default, yang tidak didukung di Visual Basic.
CA2259: Pastikan ThreadStatic hanya digunakan dengan bidang statis ThreadStaticAttribute hanya memengaruhi static bidang (Shared di Visual Basic). Saat diterapkan ke bidang instans, atribut tidak berdampak pada perilaku.
CA2260: Menerapkan antarmuka matematika generik dengan benar Antarmuka matematika generik mengharuskan jenis turunan itu sendiri digunakan untuk parameter jenis berulang sendiri.
CA2261: Jangan gunakan ConfigureAwaitOptions.SuppressThrowing dengan Task<TResult> Opsi ConfigureAwaitOptions.SuppressThrowing ini tidak didukung oleh generik Task<TResult>, karena mungkin menyebabkan pengembalian yang tidak valid TResult.
CA2262: Atur MaxResponseHeadersLength dengan benar Pastikan MaxResponseHeadersLength nilai disediakan dengan benar. Nilai ini diukur dalam kilobyte.
CA2263: Lebih suka kelebihan beban umum saat jenis diketahui Menggunakan kelebihan beban umum lebih disukai untuk meneruskan System.Type argumen ketika jenis diketahui, karena mereka mempromosikan kode yang lebih bersih dan lebih aman jenis dengan pemeriksaan waktu kompilasi yang ditingkatkan.
CA2264: Jangan berikan nilai yang tidak dapat diubah ke 'ArgumentNullException.ThrowIfNull' 'ArgumentNullException.ThrowIfNull' melemparkan ketika argumen yang diteruskan adalah 'null'. Konstruksi tertentu seperti struct yang tidak dapat diubah ke null, dan ekspresi 'nameof()' dan 'new' diketahui tidak pernah null, sehingga 'ArgumentNullException.ThrowIfNull' tidak akan pernah melemparkan.
CA2300: Jangan gunakan BinaryFormatter pendeserialisasi yang tidak aman Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2301: Jangan panggil BinaryFormatter.Deserialize tanpa terlebih dahulu mengatur BinaryFormatter.Binder Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2302: Pastikan BinaryFormatter.Binder diatur sebelum memanggil BinaryFormatter.Deserialize Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2305: Jangan gunakan LosFormatter pendeserialisasi yang tidak aman Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2310: Jangan gunakan NetDataContractSerializer pendeserialisasi yang tidak aman Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2311: Jangan mendeserialisasi tanpa terlebih dahulu mengatur NetDataContractSerializer.Binder Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2312: Pastikan NetDataContractSerializer.Binder diatur sebelum mendeserialisasi Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2315: Jangan gunakan ObjectStateFormatter pendeserialisasi yang tidak aman Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2321: Jangan mendeserialisasi dengan JavaScriptSerializer menggunakan SimpleTypeResolver Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2322: Pastikan JavaScriptSerializer tidak diinisialisasi dengan SimpleTypeResolver sebelum mendeserialisasi Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2326: Jangan gunakan nilai TypeNameHandling selain None Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2327: Jangan menggunakan JsonSerializerSettings yang tidak aman Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2328: Pastikan JsonSerializerSettings aman Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2329: Jangan mendeserialisasi dengan JsonSerializer menggunakan konfigurasi yang tidak aman Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2330: Pastikan JsonSerializer memiliki konfigurasi yang aman saat mendeserialisasi Pendeserialisasi yang tidak aman rentan saat mendeserialisasi data yang tidak tepercaya. Penyerang dapat mengubah data yang diserialisasikan untuk memasukkan jenis tidak terduga untuk menyuntikkan objek dengan efek samping yang berbahaya.
CA2350: Pastikan input DataTable.ReadXml() dipercaya Saat mendeserialisasi DataTable dengan input yang tidak tepercaya, penyerang dapat membuat input berbahaya untuk melakukan penolakan serangan layanan. Mungkin ada kerentanan eksekusi kode jarak jauh yang tidak diketahui.
CA2351: Pastikan input DataSet.ReadXml() tepercaya Saat mendeserialisasi DataSet dengan input yang tidak tepercaya, penyerang dapat membuat input berbahaya untuk melakukan penolakan serangan layanan. Mungkin ada kerentanan eksekusi kode jarak jauh yang tidak diketahui.
CA2352: DataSet atau DataTable yang tidak aman dalam jenis yang dapat diserialisasikan dapat rentan terhadap serangan eksekusi kode jarak jauh Kelas atau struct yang ditandai dengan SerializableAttribute berisi bidang atau properti DataSet atau DataTable, dan tidak memiliki GeneratedCodeAttribute.
CA2353: DataSet atau DataTable yang Tidak Aman dalam jenis yang dapat diserialisasikan Kelas atau struct yang ditandai dengan atribut serialisasi XML atau atribut kontrak data berisi bidang atau properti DataSet atau DataTable.
CA2354: DataSet atau DataTable yang Tidak Aman dalam grafik objek yang dideserialisasi dapat rentan terhadap serangan eksekusi kode jarak jauh Mendeserialisasi dengan System.Runtime.Serialization.IFormatter yang diserialisasikan, dan grafik objek jenis yang ditransmisikan dapat menyertakan DataSet atau DataTable.
CA2355: DataSet atau DataTable yang tidak aman dalam grafik objek yang dideserialisasikan Mendeserialisasi ketika grafik objek yang ditransmisikan atau ditentukan jenisnya dapat menyertakan DataSet atau DataTable.
CA2356: DataSet atau DataTable Tidak Aman dalam grafik objek yang dideserialisasi web Metode dengan System.Web.Services.WebMethodAttribute atau System.ServiceModel.OperationContractAttribute memiliki parameter yang mungkin mereferensikan DataSet atau DataTable.
CA2361: Memastikan kelas yang dihasilkan secara otomatis yang berisi DataSet.ReadXml() tidak digunakan dengan data yang tidak tepercaya Saat mendeserialisasi DataSet dengan input yang tidak tepercaya, penyerang dapat membuat input berbahaya untuk melakukan penolakan serangan layanan. Mungkin ada kerentanan eksekusi kode jarak jauh yang tidak diketahui.
CA2362: DataSet atau DataTable yang Tidak Aman dalam jenis yang dapat diserialisasikan yang dapat dibuat secara otomatis dapat menjadi rentan terhadap serangan eksekusi kode jarak jauh Saat mendeserialisasi input yang tidak tepercaya dengan BinaryFormatter dan grafik objek yang dideserialisasi berisi DataSet atau DataTable, penyerang dapat membuat payload berbahaya untuk melakukan serangan eksekusi kode jarak jauh.
CA3001: Tinjau kode untuk kerentanan injeksi SQL Saat bekerja dengan input dan perintah SQL yang tidak dipercaya, berhati-hatilah terhadap serangan injeksi SQL. Serangan injeksi SQL dapat menjalankan perintah SQL berbahaya, menyusupi keamanan dan integritas aplikasi Anda.
CA3002: Tinjau kode untuk kerentanan XSS Saat bekerja dengan input yang tidak tepercaya dari permintaan web, berhati-hatilah terhadap serangan scripting lintas situs (XSS). Serangan XSS menyuntikkan input yang tidak tepercaya ke dalam output HTML mentah, memungkinkan penyerang menjalankan skrip berbahaya atau mengubah konten di halaman web Anda dengan cara yang berbahaya.
CA3003: Tinjau kode untuk kerentanan injeksi jalur file Saat bekerja dengan input yang tidak tepercaya dari permintaan web, berhati-hatilah dalam menggunakan input yang dikontrol pengguna saat menentukan jalur ke file.
CA3004: Tinjau kode untuk kerentanan pengungkapan informasi Mengungkapkan informasi pengecualian memberi penyerang wawasan tentang internal aplikasi Anda, yang dapat membantu penyerang menemukan kerentanan lain untuk dieksploitasi.
CA3005: Meninjau kode untuk kerentanan injeksi LDAP Saat bekerja dengan input yang tidak tepercaya, perhatikan serangan injeksi Lightweight Directory Access Protocol (LDAP). Penyerang berpotensi menjalankan pernyataan LDAP berbahaya terhadap direktori informasi. Aplikasi yang menggunakan input pengguna untuk membuat pernyataan LDAP dinamis untuk mengakses layanan direktori sangat rentan.
CA3006: Tinjau kode untuk kerentanan injeksi perintah proses Saat bekerja dengan input yang tidak tepercaya, perhatikan serangan injeksi perintah. Serangan injeksi perintah dapat menjalankan perintah berbahaya pada sistem operasi yang mendasari, menyusupi keamanan dan integritas server Anda.
CA3007: Tinjau kode untuk kerentanan pengalihan terbuka Saat bekerja dengan input yang tidak tepercaya, perhatikan kerentanan pengalihan terbuka. Penyerang dapat mengeksploitasi kerentanan pengalihan terbuka untuk menggunakan situs web Anda guna memberikan tampilan URL yang sah, tetapi mengarahkan pengunjung yang tidak curiga ke phishing atau halaman web berbahaya lainnya.
CA3008: Tinjau kode untuk kerentanan injeksi JalurX Saat bekerja dengan input yang tidak tepercaya, perhatikan serangan injeksi JalurX. Membuat kueri XPath menggunakan input yang tidak tepercaya mungkin memungkinkan penyerang memanipulasi kueri dengan berbahaya untuk mengembalikan hasil yang tidak diinginkan, dan mungkin mengungkapkan konten XML yang dikueri.
CA3009: Tinjau kode untuk kerentanan injeksi XML Saat bekerja dengan input yang tidak tepercaya, perhatikan serangan injeksi XML.
CA3010: Tinjau kode untuk kerentanan injeksi XAML Saat bekerja dengan input yang tidak tepercaya, perhatikan serangan injeksi XAML. XAML adalah bahasa pemrogram markup yang secara langsung mewakili pembuatan dan eksekusi objek. Hal ini berarti elemen yang dibuat dalam XAML dapat berinteraksi dengan sumber daya sistem (misalnya, akses jaringan dan IO sistem file).
CA3011: Tinjau kode untuk kerentanan injeksi DLL Saat bekerja dengan input yang tidak tepercaya, berhati-hatilah saat memuat kode yang tidak tepercaya. Jika aplikasi web Anda memuat kode yang tidak tepercaya, penyerang mungkin dapat menyuntikkan DLL berbahaya ke dalam proses Anda dan menjalankan kode berbahaya.
CA3012: Tinjau kode untuk kerentanan injeksi regex Saat bekerja dengan input yang tidak tepercaya, perhatikan serangan injeksi regex. Penyerang dapat menggunakan injeksi regex untuk memodifikasi regex dengan secara berbahaya, membuat regex cocok dengan hasil yang tidak diinginkan, atau membuat regex menggunakan CPU berlebihan yang mengakibatkan Penolakan serangan Layanan.
CA3061: Jangan tambahkan skema berdasarkan URL Jangan gunakan kelebihan beban tidak aman dari metode Tambahkan karena dapat menyebabkan referensi eksternal yang berbahaya.
CA3075: Pemrosesan DTD Tidak Aman Jika Anda menggunakan instans DTDProcessing yang tidak aman atau mereferensikan sumber entitas eksternal, pengurai mungkin menerima input yang tidak tepercaya dan mengungkapkan informasi sensitif kepada penyerang.
CA3076: Eksekusi Skrip XSLT Tidak Aman Jika Anda menjalankan Transformasi Bahasa Lembar Gaya yang Dapat Diperluas (XSLT) di aplikasi .NET dengan tidak aman, prosesor mungkin menyelesaikan referensi URI yang tidak tepercaya yang dapat mengungkapkan informasi sensitif kepada penyerang, yang mengarah ke penolakan layanan dan serangan Lintas Situs.
CA3077: Pemrosesan Tidak Aman dalam Desain API, Dokumen XML, dan Pembaca Teks XML Saat merancang API yang diturunkan dari XMLDocument dan XMLTextReader, perhatikan DtdProcessing. Menggunakan instans DTDProcessing yang tidak aman saat mereferensikan atau menyelesaikan sumber entitas eksternal atau mengatur nilai yang tidak aman dalam XML dapat menyebabkan pengungkapan informasi.
CA3147: Tandai penangan kata kerja dengan ValidateAntiForgeryToken Saat merancang pengontrol ASP.NET MVC, perhatikan serangan pemalsuan permintaan antar situs. Serangan pemalsuan permintaan antar situs dapat mengirim permintaan berbahaya dari pengguna yang diautentikasi ke pengontrol ASP.NET MVC Anda.
CA5350: Jangan Gunakan Algoritma Kriptografis yang Lemah Algoritma enkripsi dan algoritme hash yang lemah digunakan saat ini karena sejumlah alasan, tetapi keduanya tidak boleh digunakan untuk menjamin kerahasiaan atau integritas data yang dilindungi. Aturan ini dipicu ketika menemukan algoritma TripleDES, SHA1, atau RIPEMD160 dalam kode.
CA5351: Jangan Gunakan Algoritma Kriptografi yang Rusak Algoritma kriptografi yang rusak tidak dianggap aman dan penggunaannya sangat tidak dianjurkan. Aturan ini dipicu ketika aturan menemukan algoritme hash MD5 atau algoritma enkripsi DES atau RC2 dalam kode.
CA5358: Jangan Gunakan Mode Cipher Tidak Aman Jangan Gunakan Mode Sandi Tidak Aman
CA5359: Jangan nonaktifkan validasi sertifikat Sertifikat dapat membantu mengautentikasi identitas server. Klien harus memvalidasi sertifikat server untuk memastikan permintaan dikirim ke server yang dituju. Jika ServerCertificateValidationCallback selalu menampilkan true, sertifikat apa pun akan lulus validasi.
CA5360: Jangan sebut metode berbahaya dalam deserialisasi Deserialisasi tidak aman adalah kerentanan yang terjadi ketika data yang tidak dipercaya digunakan untuk menyalahgunakan logika aplikasi, menimbulkan serangan Denial-of-Service (DoS), atau bahkan menjalankan kode arbitrer saat sedang dideserialisasi. Sering kali pengguna berbahaya dapat menyalahgunakan fitur deserialisasi ini ketika aplikasi mendeserialisasi data tidak tepercaya yang berada di bawah kontrol pengguna berbahaya. Secara khusus, panggil metode berbahaya dalam proses deserialisasi. Serangan deserialisasi tidak aman yang berhasil dapat memungkinkan penyerang melakukan serangan seperti serangan DoS, pembobolan autentikasi, dan eksekusi kode jarak jauh.
CA5361: Jangan nonaktifkan penggunaan kripto kuat Schannel Mengatur Switch.System.Net.DontEnableSchUseStrongCrypto ke true melemahkan kriptografi yang digunakan dalam koneksi Keamanan Lapisan Transportasi (TLS) yang keluar. Kriptografi yang lebih lemah dapat membahayakan kerahasiaan komunikasi antara aplikasi Anda dan server, sehingga memudahkan penyerang untuk mendapatkan data sensitif.
CA5362: Siklus referensi potensial dalam grafik objek yang dideserialisasi Jika mendeserialisasi data yang tidak tepercaya, maka kode apa pun yang memproses grafik objek yang dideserialisasi perlu menangani siklus referensi tanpa masuk ke perulangan tanpa batas. Ini mencakup kode yang merupakan bagian dari panggilan balik deserialisasi dan kode yang memproses grafik objek setelah deserialisasi selesai. Jika tidak, penyerang dapat melakukan Penolakan serangan Layanan dengan data berbahaya yang berisi siklus referensi.
CA5363: Jangan nonaktifkan validasi permintaan Validasi permintaan adalah fitur di ASP.NET yang memeriksa permintaan dan menentukan apakah permintaan tersebut berisi konten yang berpotensi berbahaya yang dapat menyebabkan serangan injeksi, termasuk scripting lintas situs.
CA5364: Jangan gunakan protokol keamanan yang tidak digunakan lagi Keamanan Lapisan Transportasi (TLS) mengamankan komunikasi antar komputer, paling umum dengan Hypertext Transfer Protocol Secure (HTTPS). Versi protokol TLS yang lebih lama kurang aman dibandingkan TLS 1.2 dan TLS 1.3 dan lebih cenderung memiliki kerentanan baru. Hindari versi protokol yang lebih lama untuk meminimalkan risiko.
CA5365: Jangan Nonaktifkan Pemeriksaan Header HTTP Pemeriksaan header HTTP memungkinkan pengodean karakter kembali ke awal dan baris baru, \r dan \n, yang ditemukan di header respons. Pengodean ini dapat membantu menghindari serangan injeksi yang mengeksploitasi aplikasi yang menggemakan data tidak tepercaya yang disimpan oleh header.
CA5366: Menggunakan XmlReader untuk Xml Baca Himpunan Data DataSet Menggunakan XML untuk membaca XML dengan data yang tidak tepercaya mungkin memuat referensi eksternal berbahaya, yang harus dibatasi dengan menggunakan pemecah masalah aman XmlReader atau dengan pemrosesan DTD dinonaktifkan.
CA5367: Jangan Serialisasi Jenis Dengan Bidang Penunjuk Aturan ini memeriksa apakah ada kelas yang dapat diserialisasikan dengan bidang atau properti pointer. Anggota yang tidak dapat diserialisasikan dapat berupa pointer, seperti anggota statik atau bidang yang ditandai dengan NonSerializedAttribute.
CA5368: Atur ViewStateUserKey Untuk Kelas yang Berasal dari Halaman Mengatur properti ViewStateUserKey dapat membantu Anda mencegah serangan pada aplikasi Anda dengan memungkinkan Anda menetapkan pengidentifikasi ke variabel status tampilan untuk masing-masing pengguna sehingga penyerang tidak dapat menggunakan variabel tersebut untuk menghasilkan serangan. Jika tidak, akan ada kerentanan terhadap pemalsuan permintaan antar situs.
CA5369: Gunakan XmlReader untuk Deserialisasi Memproses skema DTD dan XML yang tidak tepercaya mungkin memungkinkan pemuatan referensi eksternal berbahaya, yang harus dibatasi dengan menggunakan XmlReader dengan resolver aman atau dengan pemrosesan skema sebaris DTD dan XML dinonaktifkan.
CA5370: Gunakan XmlReader untuk memvalidasi pembaca Memproses skema DTD dan XML yang tidak tepercaya mungkin memungkinkan pemuatan referensi eksternal yang berbahaya. Pemuatan berbahaya ini dapat dibatasi dengan menggunakan XmlReader dengan penyelesai aman atau dengan pemrosesan skema sebaris DTD dan XML yang dinonaktifkan.
CA5371: Gunakan XmlReader untuk pembacaan skema Memproses skema DTD dan XML yang tidak tepercaya mungkin memungkinkan pemuatan referensi eksternal yang berbahaya. Menggunakan XmlReader dengan penyelesai aman atau dengan pemrosesan skema sebaris DTD dan XML yang dinonaktifkan akan membatasi hal ini.
CA5372: Gunakan XmlReader untuk XPathDocument Memproses XML dari data yang tidak tepercaya mungkin memuat referensi eksternal berbahaya, yang dapat dibatasi dengan menggunakan XmlReader dengan resolver aman atau dengan pemrosesan DTD dinonaktifkan.
CA5373: Jangan gunakan fungsi turunan kunci yang usang Aturan ini mendeteksi pemanggilan metode turunan kunci lemah System.Security.Cryptography.PasswordDeriveBytes dan Rfc2898DeriveBytes.CryptDeriveKey. System.Security.Cryptography.PasswordDeriveBytes menggunakan algoritma lemah PBKDF1.
CA5374: Jangan Gunakan XslTransform Aturan ini memeriksa apakah System.Xml.Xsl.XslTransform dibuat dalam kode. System.Xml.Xsl.XslTransform sekarang sudah usang dan tidak boleh digunakan.
CA5375: Jangan gunakan tanda tangan akses bersama akun SAS akun dapat mendelegasikan akses untuk membaca, menulis, dan menghapus operasi pada kontainer blob, tabel, antrean, dan berbagi yang tidak diizinkan dengan SAS layanan. Tetapi, SAS akun tidak mendukung kebijakan tingkat kontainer dan memiliki lebih sedikit fleksibilitas serta kontrol atas izin yang diberikan. Setelah pengguna berbahaya mendapatkannya, akun penyimpanan Anda akan mudah disusupi.
CA5376: Gunakan SharedAccessProtocol HttpsOnly SAS adalah data sensitif yang tidak dapat dikirim dalam teks biasa di HTTP.
CA5377: Menggunakan kebijakan akses tingkat kontainer Kebijakan akses tingkat kontainer dapat diubah atau dicabut kapan saja. Ini memberikan fleksibilitas dan kontrol yang lebih besar atas izin yang diberikan.
CA5378: Jangan nonaktifkan ServicePointManagerSecurityProtocols Mengatur Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols ke true membatasi koneksi Keamanan Lapisan Transportasi (TLS) Windows Communication Framework (WCF) untuk menggunakan TLS 1.0. Versi TLS tersebut tidak akan digunakan lagi.
CA5379: Jangan gunakan algoritma fungsi derivasi kunci yang lemah Kelas Rfc2898DeriveBytes default menggunakan algoritma SHA1. Anda harus menentukan algoritme hash untuk digunakan dalam beberapa overload konstruktor dengan SHA256 atau lebih tinggi. Perhatikan, properti HashAlgorithm hanya memiliki pengakses get dan tidak memiliki pemodifikasi overridden.
CA5380: Jangan tambahkan sertifikat ke penyimpanan akar Aturan ini mendeteksi kode yang menambahkan sertifikat ke penyimpanan sertifikat Otoritas Sertifikasi Akar Tepercaya. Secara default, penyimpanan sertifikat Otoritas Sertifikasi Akar Tepercaya dikonfigurasi dengan serangkaian CA publik yang telah memenuhi persyaratan Program Sertifikat Akar Microsoft.
CA5381: Pastikan sertifikat tidak ditambahkan ke penyimpanan akar Aturan ini mendeteksi kode yang berpotensi menambahkan sertifikat ke penyimpanan sertifikat Otoritas Sertifikasi Akar Tepercaya. Secara default, penyimpanan sertifikat Otoritas Sertifikasi Akar Tepercaya dikonfigurasi dengan serangkaian otoritas sertifikasi (OS) publik yang telah memenuhi persyaratan Program Sertifikat Akar Microsoft.
CA5382: Gunakan cookie aman di ASP.NET Core Aplikasi yang tersedia melalui HTTPS harus menggunakan cookie aman, yang menunjukkan kepada browser bahwa cookie hanya boleh dikirimkan menggunakan Secure Sockets Layer (SSL).
CA5383: Pastikan gunakan cookie aman di ASP.NET Core Aplikasi yang tersedia melalui HTTPS harus menggunakan cookie aman, yang menunjukkan kepada browser bahwa cookie hanya boleh dikirimkan menggunakan Secure Sockets Layer (SSL).
CA5384: Jangan gunakan algoritma tanda tangan digital (DSA) DSA adalah algoritma enkripsi asimetris yang lemah.
CA5385: Gunakan algoritma Rivest–Shamir–Adleman (RSA) dengan ukuran kunci yang memadai Kunci RSA yang lebih kecil dari 2048 bit lebih rentan terhadap serangan brute force.
CA5386: Hindari mengodekan nilai SecurityProtocolType secara permanen Keamanan Lapisan Transportasi (TLS) mengamankan komunikasi antar komputer, paling umum dengan Hypertext Transfer Protocol Secure (HTTPS). Versi protokol TLS 1.0 dan TLS 1.1 tidak digunakan lagi, sementara TLS 1.2 dan TLS 1.3 adalah yang terbaru. Di masa mendatang, TLS 1.2 dan TLS 1.3 mungkin tidak digunakan lagi. Untuk memastikan bahwa aplikasi Anda tetap aman, hindari hardcoding versi protokol dan targetkan setidaknya .NET Framework v4.7.1.
CA5387: Jangan gunakan fungsi derivasi kunci yang lemah dengan jumlah perulangan yang tidak mencukup Aturan ini memeriksa apakah kunci kriptografi dihasilkan oleh Rfc2898DeriveBytes dengan jumlah perulangan kurang dari 100.000. Jumlah perulangan yang lebih tinggi dapat membantu mengurangi serangan kamus yang mencoba menebak kunci kriptografis yang dihasilkan.
CA5388: Memastikan jumlah iterasi yang memadai saat menggunakan fungsi derivasi kunci yang lemah Aturan ini memeriksa apakah kunci kriptografi dihasilkan oleh Rfc2898DeriveBytes dengan jumlah iterasi yang mungkin kurang dari 100.000. Jumlah perulangan yang lebih tinggi dapat membantu mengurangi serangan kamus yang mencoba menebak kunci kriptografis yang dihasilkan.
CA5389: Jangan tambahkan jalur item arsip ke jalur sistem file target Jalur file dapat relatif dan dapat menyebabkan akses sistem file di luar jalur target sistem file yang diharapkan, yang mengarah ke perubahan konfigurasi berbahaya dan eksekusi kode jarak jauh melalui teknik lay-and-wait.
CA5390: Jangan kunci enkripsi kode keras Agar algoritma simetris berhasil, kunci rahasia harus diketahui hanya oleh pengirim dan penerima. Ketika kunci dikodekan secara permanen, kunci akan menjadi mudah ditemukan. Bahkan dengan biner yang dikompilasi, mudah bagi pengguna berbahaya untuk mengekstrak kunci. Setelah kunci privat disusupi, teks cipher dapat didekripsi secara langsung dan tidak dilindungi lagi.
CA5391: Gunakan token antiforgery di ASP.NET pengontrol Core MVC Menangani POSTpermintaan , , PUTPATCH, atau DELETE tanpa memvalidasi token antiforgery mungkin rentan terhadap serangan pemalsuan permintaan lintas situs. Serangan pemalsuan permintaan antar situs dapat mengirim permintaan berbahaya dari pengguna yang diautentikasi ke pengontrol ASP.NET Core MVC Anda.
CA5392: Gunakan atribut DefaultDllImportSearchPaths untuk P/Invokes Secara default, P/Invoke berfungsi menggunakan DllImportAttribute menyelidiki sejumlah direktori, termasuk direktori kerja saat ini yang akan dimuat pustaka. Hal ini dapat menjadi masalah keamanan untuk aplikasi tertentu, yang mengarah ke pembajakan DLL.
CA5393: Jangan gunakan nilai DllImportSearchPath yang tidak aman Mungkin ada DLL berbahaya di direktori pencarian DLL default dan direktori rakitan. Atau, tergantung dari mana aplikasi Anda dijalankan, mungkin ada DLL berbahaya di direktori aplikasi.
CA5394: Jangan gunakan keacakan yang tidak aman Menggunakan generator angka pseudo-random yang lemah secara kriptografis mungkin memungkinkan penyerang untuk memprediksi nilai sensitif keamanan apa yang akan dihasilkan.
CA5395: Atribut Miss HttpVerb untuk metode tindakan Semua metode tindakan yang membuat, mengedit, menghapus, atau mengubah data perlu dilindungi dengan atribut anti pemalsuan dari serangan pemalsuan permintaan antar situs. Melakukan operasi GET harus menjadi operasi yang aman yang tidak memiliki efek samping dan tidak mengubah data Anda yang disimpan.
CA5396: Atur HttpOnly ke true untuk HttpCookie Sebagai langkah pertahanan mendalam, pastikan cookie HTTP sensitif keamanan ditandai sebagai HttpOnly. Ini menunjukkan browser web harus melarang skrip mengakses cookie. Skrip berbahaya yang disuntikkan adalah cara umum untuk mencuri cookie.
CA5397: Jangan gunakan nilai SslProtocols yang tidak digunakan lagi Keamanan Lapisan Transportasi (TLS) mengamankan komunikasi antar komputer, paling umum dengan Hypertext Transfer Protocol Secure (HTTPS). Versi protokol TLS yang lebih lama kurang aman dibandingkan TLS 1.2 dan TLS 1.3 dan lebih cenderung memiliki kerentanan baru. Hindari versi protokol yang lebih lama untuk meminimalkan risiko.
CA5398: Hindari nilai SslProtocols yang dikodekan secara permanen Keamanan Lapisan Transportasi (TLS) mengamankan komunikasi antar komputer, paling umum dengan Hypertext Transfer Protocol Secure (HTTPS). Versi protokol TLS 1.0 dan TLS 1.1 tidak digunakan lagi, sementara TLS 1.2 dan TLS 1.3 adalah yang terbaru. Di masa mendatang, TLS 1.2 dan TLS 1.3 mungkin tidak digunakan lagi. Untuk memastikan bahwa aplikasi Anda tetap aman, hindari mengodekan versi protokol secara permanen.
CA5399: Pasti menonaktifkan pemeriksaan daftar pencabutan sertifikat HttpClient Sertifikat yang dicabut tidak dipercaya lagi. Sertifikat yang dicabut dapat digunakan oleh penyerang yang mengirimkan beberapa data berbahaya atau mencuri data sensitif dalam komunikasi HTTPS.
CA5400: Pastikan pemeriksaan daftar pencabutan sertifikat HttpClient tidak dinonaktifkan Sertifikat yang dicabut tidak dipercaya lagi. Sertifikat yang dicabut dapat digunakan oleh penyerang yang mengirimkan beberapa data berbahaya atau mencuri data sensitif dalam komunikasi HTTPS.
CA5401: Jangan gunakan CreateEncryptor dengan IV non-default Enkripsi simetris harus selalu menggunakan vektor inisialisasi yang tidak dapat diulang untuk mencegah serangan kamus.
CA5402: Gunakan CreateEncryptor dengan IV default Enkripsi simetris harus selalu menggunakan vektor inisialisasi yang tidak dapat diulang untuk mencegah serangan kamus.
CA5403: Jangan mengodekan sertifikat secara permanen Parameter data atau rawData dari konstruktor X509Certificate atau X509Certificate2 dikodekan secara permanen.
CA5404: Jangan nonaktifkan pemeriksaan validasi token Properti TokenValidationParameters yang tidak boleh diatur ke false oleh validasi token kontrol.
CA5405: Jangan selalu melewatkan validasi token dalam delegasi Panggilan balik yang ditetapkan ke AudienceValidator atau LifetimeValidator selalu mengembalikan true.
IL3000: Hindari mengakses jalur file Assembly saat menerbitkan sebagai satu file Hindari mengakses jalur file Rakitan saat menerbitkan sebagai satu file.
IL3001: Hindari mengakses jalur file Assembly saat menerbitkan sebagai file tunggal Hindari mengakses jalur file Rakitan saat menerbitkan sebagai satu file.
IL3002: Hindari memanggil anggota yang diannotasi dengan 'RequiresAssemblyFilesAttribute' saat menerbitkan sebagai satu file Menghindari dari memanggil anggota yang dianotasikan dengan 'RequiresAssemblyFilesAttribute' saat menerbitkan sebagai satu file
IL3003: Anotasi 'RequiresAssemblyFilesAttribute' harus cocok di semua implementasi atau penimpaan antarmuka. Anotasi 'RequiresAssemblyFilesAttribute' harus cocok dengan semua penerapan atau penggantian antarmuka.

Legenda

Tabel berikut menunjukkan jenis informasi yang disediakan untuk setiap aturan dalam dokumentasi referensi.

Item Deskripsi
Jenis TypeName untuk aturan.
ID Aturan Pengidentifikasi unik untuk aturan. RuleId dan Category digunakan untuk penyembunyian peringatan di dalam sumber.
Golongan Kategori aturan, misalnya, keamanan.
Perbaikan bersifat disruptif atau non-disruptif Apakah perbaikan untuk pelanggaran aturan adalah perubahan yang melanggar. Perubahan yang melanggar berarti bahwa rakitan yang memiliki dependensi pada target yang menyebabkan pelanggaran tidak akan dikompilasi ulang dengan versi tetap yang baru atau mungkin gagal pada durasi karena perubahan tersebut. Ketika beberapa perbaikan tersedia dan setidaknya satu perbaikan adalah perubahan yang melanggar dan satu perbaikan tidak melanggar, 'Melanggar' dan 'Tidak Melanggar' akan ditentukan.
Penyebab Kode terkendali khusus yang menyebabkan aturan menghasilkan peringatan.
Deskripsi Membahas masalah yang menyebabkan peringatan tersebut.
Cara memperbaiki pelanggaran Menjelaskan cara mengubah kode sumber untuk memenuhi aturan dan mencegahnya menghasilkan peringatan.
Kapan harus menekan peringatan Menjelaskan kapan saat yang aman untuk menyembunyikan peringatan dari aturan.
Contoh kode Contoh yang melanggar aturan dan contoh yang dikoreksi yang memenuhi aturan.
Aturan terkait Aturan terkait.