Bagikan melalui


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 8 Tidak

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.

Baca juga