Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| 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.