CA2243: Harfiah string atribut harus diurai dengan benar
Properti | Nilai |
---|---|
ID Aturan | CA2243 |
Judul | Literal string atribut harus diurai dengan benar |
Golongan | Penggunaan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Parameter harfiah string atribut tidak diurai dengan benar untuk URL, GUID, atau Versi.
Deskripsi aturan
Karena atribut berasal dari System.Attribute, dan atribut digunakan pada waktu kompilasi, hanya nilai konstanta yang dapat diteruskan ke konstruktornya. Parameter atribut yang harus mewakili URL, GUID, dan Versi tidak dapat ditik sebagai System.Uri, , System.Guiddan System.Version, karena jenis ini tidak dapat direpresentasikan sebagai konstanta. Sebaliknya, mereka harus diwakili oleh string.
Karena parameter di ketik sebagai string, ada kemungkinan bahwa parameter yang salah diformat dapat diteruskan pada waktu kompilasi.
Aturan ini menggunakan heuristik penamaan untuk menemukan parameter yang mewakili pengidentifikasi sumber daya seragam (URI), Pengidentifikasi Unik Global (GUID), atau Versi, dan memverifikasi bahwa nilai yang dilewatkan sudah benar.
Cara memperbaiki pelanggaran
Ubah string parameter menjadi URL, GUID, atau Versi yang dibentuk dengan benar.
Kapan harus menekan peringatan
Aman untuk menekan peringatan dari aturan ini jika parameter tidak mewakili URL, GUID, atau Versi.
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 CA2243
// The code that's violating the rule is on this line.
#pragma warning restore CA2243
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA2243.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh
Contoh berikut menunjukkan kode untuk AssemblyFileVersionAttribute yang melanggar aturan ini.
[AttributeUsage(AttributeTargets.Assembly, Inherited = false)]
[ComVisible(true)]
public sealed class AssemblyFileVersionAttribute : Attribute
{
public AssemblyFileVersionAttribute(string version) { }
public string? Version { get; set; }
}
// Since the parameter is typed as a string, it is possible
// to pass an invalid version number at compile time. The rule
// would be violated by the following code: [assembly : AssemblyFileVersion("xxxxx")]
Aturan dipicu oleh parameter berikut:
Parameter yang berisi 'versi' dan tidak dapat diuraikan ke System.Version.
Parameter yang berisi 'guid' dan tidak dapat diuraikan ke System.Guid.
Parameter yang berisi 'uri', 'urn', atau 'url' dan tidak dapat diurai ke System.Uri.