Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
| Недвижимость | Ценность |
|---|---|
| Идентификатор правила | CA2023 |
| Заголовок | Недопустимые фигурные скобки в шаблоне сообщения |
| Категория | Надёжность |
| Исправление является разрушающим или неразрушающим | Non-breaking |
| Включен по умолчанию в .NET 10 | Как предупреждение |
Причина
Фигурные скобки, представленные в шаблоне сообщения, недопустимы. Убедитесь, что все фигурные скобки в шаблоне сообщения являются допустимыми открывающим и закрывающим фигурными скобками или экранируются.
Описание правила
Шаблоны сообщений ведения журнала используют фигурные скобки { и } обозначать именованные заполнители для значений. Недопустимое использование фигурных скобок в шаблонах сообщений может привести к исключению среды выполнения или непредвиденному ведению журнала. Это правило обнаруживает:
- Несовпаденные фигурные скобки или закрывающие фигурные скобки.
- Вложенные фигурные скобки, которые неправильно экранируются.
- Другие неправильно сформированные шаблоны фигурных скобок.
Устранение нарушений
Чтобы устранить нарушение этого правила:
- Убедитесь, что все открывающие фигурные скобки
{имеют соответствующую закрывающую скобку}. - Escape литеральные скобки, удвоив их:
{{для{и}}для}. - Исправьте все вложенные или неправильно сформированные шаблоны фигурных скобок.
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
Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".