CA1422: Platform uyumluluğunu doğrulama - engellenen API'ler
Özellik | Değer |
---|---|
Kural Kimliği | CA1422 |
Başlık | Platform uyumluluğunu doğrulama - engellenen API'ler |
Kategori | Birlikte çalışabilirlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 8'de varsayılan olarak etkin | Uyarı olarak |
Neden
ile ObsoletedOSPlatformAttribute işaretlenmiş bir API, engellenen işletim sistemini (OS) destekliyor olarak işaretlenmiş bir çağrı sitesinden çağrılır. Bu kural CA1416'ya benzer: Belirli bir platformda kullanılmayan ve tamamen desteklenmeyen API'ler hakkında uyarması dışında platform uyumluluğunu doğrulayın.
Kural açıklaması
Belirli bir işletim sisteminde (sürüm) kullanılmayan bir API'yi bu işletim sisteminden (sürüm) erişilebilen bir çağrı sitesinden çağırmak önerilmez. Bunun yerine eski olmayan bir API çağırmayı veya etkilenen işletim sistemlerinde eski API'yi çağırmaya karşı koruma yapmayı göz önünde bulundurun.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmenin çeşitli yolları vardır:
- Veya ile işaretleyerek, çağrı sitesini engellenen sürümü içermeyen işletim sistemleriyle UnsupportedOSPlatformAttributeObsoletedOSPlatformAttributekısıtlayın.
- API'leri kullanarak System.OperatingSystem çağrıyı koruma, örneğin,
if (!OperatingSystem.IsLinux())
. - ile UnsupportedOSPlatformGuardAttribute açıklama ekleyen veya SupportedOSPlatformGuardAttributeolumsuzlanan bir API kullanarak çağrıyı koruma.
Örnek
Aşağıdaki kod parçacığı CA1422 ihlalini gösterir:
[SupportedOSPlatform("Windows")]
public void M1()
{
// Violates rule CA1422.
// This call site is reachable on 'Windows',
// but 'ObsoletedOnWindows62()'
// is obsoleted on 'Windows 6.2' and later.
ObsoletedOnWindows62();
}
[ObsoletedOSPlatform("Windows6.2")]
public void ObsoletedOnWindows62()
{ }
<SupportedOSPlatform("Windows")>
Public Sub M1()
' Violates rules CA1422.
' This call site is reachable on 'Windows',
' but 'ObsoletedOnWindows62()'
' is obsoleted on 'Windows 6.2' and later.
ObsoletedOnWindows62()
End Sub
<ObsoletedOSPlatform("Windows6.2")>
Public Sub ObsoletedOnWindows62()
End Sub
Aşağıdaki kod parçacığı, çağrı sitesine çağrılan yöntemin engellendiği sürümü belirten bir UnsupportedOSPlatformAttribute öznitelik ekleyerek ihlali düzeltir.
[SupportedOSPlatform("Windows")]
[ObsoletedOSPlatform("Windows6.2")]
public void M1()
{
ObsoletedOnWindows62();
}
[ObsoletedOSPlatform("Windows6.2")]
public void ObsoletedOnWindows62()
{ }
<SupportedOSPlatform("Windows")>
<ObsoletedOSPlatform("Windows6.2")>
Public Sub M1()
ObsoletedOnWindows62()
End Sub
<ObsoletedOSPlatform("Windows6.2")>
Public Sub ObsoletedOnWindows62()
End Sub
Uyarıların ne zaman bastırılması gerekiyor?
Eski bir API'yi çağırma konusunda endişeniz yoksa veya eski API'nin etkilenen işletim sistemi sürümünde hiçbir zaman çağrılmayacak olduğunu biliyorsanız, bu kuraldan gelen bir uyarıyı gizlemeniz güvenlidir.
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 CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none
Bu kural kategorisinin tamamını devre dışı bırakmak için, kategorinin önem derecesini none
yapılandırma dosyasında olarak ayarlayın.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.