Bagikan melalui


CA2023: Kurung kurawal tidak valid dalam templat pesan

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.

Lihat juga