Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Mülkiyet | Değer |
|---|---|
| Kural Kimliği |
CA2023 |
| Başlık | İleti şablonunda geçersiz ayraçlar |
| Kategori | Reliability |
| Düzeltme kırılgan mı yoksa sağlam mı | Non-breaking |
| .NET 10'da varsayılan olarak etkin | Uyarı olarak |
Nedeni
İleti şablonunda bulunan ayraçlar geçersiz. İleti şablonundaki tüm küme ayraçlarının geçerli açma/kapatma ayraçları olduğundan veya kaçıldığından emin olun.
Kural açıklaması
Günlük iletisi şablonları, küme ayraçlarını { kullanır ve } değerler için adlandırılmış yer tutucuları belirtir. İleti şablonlarında geçersiz küme ayracı kullanımı çalışma zamanı özel durumlarına veya beklenmeyen günlüğe kaydetme davranışına neden olabilir. Bu kural aşağıdakileri algılar:
- Eşleşmeyen açma veya kapatma ayraçları.
- Doğru şekilde kaçılmamış iç içe küme ayraçları.
- Diğer hatalı biçimlendirilmiş ayraç desenleri.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek için:
- Tüm açılış ayraçlarının
{karşılık gelen bir kapanış ayracına}sahip olduğundan emin olun. - Sabit ayraçları ikiye katlayarak kaçış
{{: için{ve}}için}. - İç içe veya hatalı biçimlendirilmiş küme ayracı desenlerini düzeltin.
Example
Aşağıdaki kod parçacığı CA2023 ihlallerini gösterir:
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şağıdaki kod parçacığı ihlalleri düzeltir:
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
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan bir uyarıyı gizlemeyin. İleti şablonlarındaki geçersiz küme ayraçları çalışma zamanı özel durumlarına veya yanlış günlük çıkışına neden olabilir.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA2023
// The code that's violating the rule is on this line.
#pragma warning restore CA2023
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, none önem derecesini olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA2023.severity = none
Daha fazla bilgi için bkz. Kod analizi uyarılarını gizleme.