Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Harta benda | Nilai |
|---|---|
| Identifikasi Aturan | CA2023 |
| Title | Kurung kurawal tidak valid dalam templat pesan |
| Kategori | Keandalan |
| Perbaikan bersifat merusak atau tidak merusak | Non-breaking |
| Diaktifkan secara default di .NET 10 | Sebagai peringatan |
Penyebab
Kurung kurawal yang ada dalam templat pesan tidak valid. Pastikan kurung kurawal apa pun dalam templat pesan valid membuka/menutup kurung kurawal, atau lolos.
Deskripsi aturan
Templat pesan pengelogan menggunakan kurung kurawal { dan } untuk menunjukkan tempat penampung bernama untuk nilai. Penggunaan kurung kurawal yang tidak valid dalam templat pesan dapat mengakibatkan pengecualian runtime atau perilaku pengelogan yang tidak terduga. Aturan ini mendeteksi:
- Kurung kurawal buka atau tutup yang tidak cocok.
- Kurung kurawal berlapis yang tidak lolos dengan benar.
- Pola kurung kurawal cacat lainnya.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini:
- Pastikan semua kurung
{kurawal pembuka memiliki kurung kurawal}penutup yang sesuai. - Loloskan kurung kurawal harfiah dengan menggandakannya:
{{untuk{dan}}untuk}. - Perbaiki pola kurung kurawal berlapis atau salah bentuk.
Example
Cuplikan kode berikut menunjukkan pelanggaran CA2023:
using Microsoft.Extensions.Logging;
class Example
{
private readonly ILogger _logger;
public Example(ILogger<Example> logger)
{
_logger = logger;
}
public void LogData(string name, int value)
{
// Violation: unmatched opening brace.
_logger.LogInformation("Processing {Name with value {Value}", name, value);
// Violation: unmatched closing brace.
_logger.LogInformation("Processing Name} with value {Value}", name, value);
}
}
Imports Microsoft.Extensions.Logging
Class Example
Private ReadOnly _logger As ILogger
Public Sub New(logger As ILogger(Of Example))
_logger = logger
End Sub
Public Sub LogData(name As String, value As Integer)
' Violation: unmatched opening brace.
_logger.LogInformation("Processing {Name with value {Value}", name, value)
' Violation: unmatched closing brace.
_logger.LogInformation("Processing Name} with value {Value}", name, value)
End Sub
End Class
Cuplikan kode berikut memperbaiki pelanggaran:
using Microsoft.Extensions.Logging;
class Example
{
private readonly ILogger _logger;
public Example(ILogger<Example> logger)
{
_logger = logger;
}
public void LogData(string name, int value)
{
// Fixed: proper braces.
_logger.LogInformation("Processing {Name} with value {Value}", name, value);
// Fixed: escaped literal braces.
_logger.LogInformation("Processing {{Name}} with value {Value}", name, value);
}
}
Imports Microsoft.Extensions.Logging
Class Example
Private ReadOnly _logger As ILogger
Public Sub New(logger As ILogger(Of Example))
_logger = logger
End Sub
Public Sub LogData(name As String, value As Integer)
' Fixed: proper braces.
_logger.LogInformation("Processing {Name} with value {Value}", name, value)
' Fixed: escaped literal braces.
_logger.LogInformation("Processing {{Name}} with value {Value}", name, value)
End Sub
End Class
Kapan harus menekan peringatan
Jangan menekan peringatan dari aturan ini. Kurung kurawal yang tidak valid dalam templat pesan dapat menyebabkan pengecualian runtime atau output log yang salah.
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 CA2023
// The code that's violating the rule is on this line.
#pragma warning restore CA2023
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA2023.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.