| プロパティ | 価値 |
|---|---|
| ルール識別子 | CA2023 |
| タイトル | メッセージ テンプレートの中かっこが無効です |
| カテゴリ | Reliability |
| 修正が破壊的であるか非破壊的であるか | Non-breaking |
| .NET 10 で既定で有効 | 警告として |
原因
メッセージ テンプレートに存在する中かっこが無効です。 メッセージ テンプレート内の中かっこが有効な開始/閉じ中かっこであるか、エスケープされていることを確認します。
ルールの説明
ログ メッセージ テンプレートでは、中かっこ { と } を使用して、値の名前付きプレースホルダーを示します。 メッセージ テンプレートで中かっこを無効に使用すると、実行時の例外や予期しないログの動作が発生する可能性があります。 このルールでは、次の情報が検出されます。
- 一致しない開始中かっこまたは右中かっこ。
- 正しくエスケープされていない入れ子になった中かっこ。
- その他の形式が正しくない中かっこパターン。
違反を修正する方法
この規則の違反を修正するには:
- すべての左中かっこ
{対応する右中かっこ}があることを確認します。 - リテラル中かっこを 2 倍にしてエスケープします。
{{の場合は{、}}の場合は}。 - 入れ子になった、または形式が正しくない中かっこパターンを修正します。
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
ファイル、フォルダー、またはプロジェクトのルールを無効にするには、その重大度をnoneでに設定します。
[*.{cs,vb}]
dotnet_diagnostic.CA2023.severity = none
詳細については、「 コード分析の警告を抑制する方法」を参照してください。
こちらも参照ください
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET