Megosztás a következőn keresztül:


CA2023: Érvénytelen zárójelek az üzenetsablonban

Ingatlan Érték
Szabályazonosító CA2023
Title Érvénytelen zárójelek az üzenetsablonban
Kategória Megbízhatóság
A javítás törést okoz vagy nem okoz törést Nem törhető
Alapértelmezés szerint engedélyezve a .NET 10-ben Figyelmeztetésként

Oka

Az üzenetsablonban található zárójelek érvénytelenek. Győződjön meg arról, hogy az üzenetsablonban lévő kapcsos zárójelek érvényesek a nyitó/záró zárójelek között, vagy nincsenek megszabadulva.

Szabály leírása

A naplózási üzenetsablonok kapcsos zárójeleket { használnak, és } az értékek nevesített helyőrzőit jelölik. Az üzenetsablonok érvénytelen zárójelhasználata futásidejű kivételeket vagy váratlan naplózási viselkedést eredményezhet. Ez a szabály a következőket észleli:

  • Nem egyező nyitó vagy záró zárójelek.
  • Beágyazott kapcsos zárójelek, amelyek nem megfelelően szöktek meg.
  • Egyéb helytelen kapcsos zárójelminták.

Szabálysértések kijavítása

A szabály megsértésének kijavítása:

  • Győződjön meg arról, hogy minden kapcsos kapcsos { zárójel }megfelelő.
  • A konstans kapcsos zárójelek feloldásához duplázd meg őket: {{ for { és }} for }.
  • Javítsa ki a beágyazott vagy hibás kapcsos zárójelmintákat.

Example

A következő kódrészlet a CA2023 megsértését mutatja be:

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

A következő kódrészlet kijavítja a szabálysértéseket:

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

Mikor kell letiltani a figyelmeztetéseket?

Ne tiltsa el a szabály figyelmeztetését. Az üzenetsablonokban érvénytelen zárójelek futásidejű kivételeket vagy helytelen naplókimenetet okozhatnak.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.

Lásd még