Delen via


CA2023: Ongeldige accolades in berichtsjabloon

Vastgoed Waarde
Regel-ID CA2023
Titel Ongeldige accolades in berichtsjabloon
Categorie Reliability
De oplossing veroorzaakt brekende of niet-brekende problemen Non-breaking
Standaard ingeschakeld in .NET 9 Als waarschuwing

Oorzaak

De accolades in de berichtsjabloon zijn ongeldig. Zorg ervoor dat eventuele accolades in de berichtsjabloon geldige accolades voor openen/sluiten zijn of dat deze zijn ontsnapt.

Beschrijving van regel

In berichtsjablonen voor logboekregistratie worden accolades { gebruikt en } worden benoemde tijdelijke aanduidingen voor waarden aangeduid. Ongeldig accoladegebruik in berichtsjablonen kan leiden tot runtime-uitzonderingen of onverwacht gedrag voor logboekregistratie. Met deze regel wordt het volgende gedetecteerd:

  • Niet-overeenkomende accolades openen of sluiten.
  • Geneste accolades die niet goed zijn ontsnapt.
  • Andere verkeerd gevormde accoladepatronen.

Hoe schendingen op te lossen

Een schending van deze regel oplossen:

  • Zorg ervoor dat alle openingsbeugels { een bijbehorende sluitbrace }hebben.
  • Escape letterlijke accolades door ze te verdubbelen: {{ voor { en }} voor }.
  • Corrigeer geneste of onjuiste accoladepatronen.

Example

In het volgende codefragment ziet u schendingen van 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

Met het volgende codefragment worden de schendingen opgelost:

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

Wanneer waarschuwingen onderdrukken

Een waarschuwing van deze regel niet onderdrukken. Ongeldige accolades in berichtsjablonen kunnen runtime-uitzonderingen of onjuiste logboekuitvoer veroorzaken.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none in het configuratiebestand.

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

Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.

Zie ook