Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| 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.