共用方式為


CA2023:訊息範本中的大括弧無效

房產 價值觀
規則識別碼 CA2023
標題 訊息範本中的大括弧無效
類別 Reliability
修正是破壞性或非破壞性 Non-breaking
在 .NET 10 中預設啟用 作為警告

原因

訊息範本中存在的大括弧無效。 請確定訊息範本中的任何大括弧都是有效的左大括弧/右大括弧,或逸出。

規則描述

記錄訊息範本會使用大括弧 { ,並 } 表示值的具名預留位置。 訊息範本中使用無效的大括弧可能會導致執行時期異常狀況或非預期的記載行為。 此規則會偵測:

  • 無與倫比的左大括號或右大括號。
  • 未正確逸出的巢狀大括弧。
  • 其他畸形的支架圖案。

如何修正違規

若要修正此規則的違規:

  • 確保所有左大括號 { 都有相應的右大括號 }
  • 通過將大括號加倍來轉義字面大括號: {{ for {}} for }
  • 修正任何巢狀或格式不正確的大括號圖案。

Example

下列程式碼片段顯示違反 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

下列程式碼片段修正違規:

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

隱藏警告的時機

不要隱藏此規則中的警告。 訊息範本中的無效大括號可能導致執行時異常或錯誤的日誌輸出。

隱藏警告

如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。

#pragma warning disable CA2023
// The code that's violating the rule is on this line.
#pragma warning restore CA2023

若要停用檔案、資料夾或項目的規則,請在組態檔中將其嚴重性設為

[*.{cs,vb}]
dotnet_diagnostic.CA2023.severity = none

如需詳細資訊,請參閱 如何隱藏程式碼分析警告

另請參閱