| 房產 | 價值觀 |
|---|---|
| 規則識別碼 | 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
如需詳細資訊,請參閱 如何隱藏程式碼分析警告。