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.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA1422 |
| Başlık | Platform uyumluluğunu doğrulama - kullanımdan kaldırılmış API'ler |
| Kategori | Birlikte çalışabilirlik |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Uyarı olarak |
| Geçerli diller | C# ve Visual Basic |
Neden
ObsoletedOSPlatformAttribute ile işaretlenmiş bir API, kullanımdan kaldırılmış işletim sistemini desteklediği olarak işaretlenmiş bir çağrı sitesinden çağrılır. Bu kural, belirli bir platformda kullanılmaz hale gelmiş veya tamamen desteklenmeyen API'ler hakkında uyarması dışında, CA1416: Platform uyumluluğunu doğrulama kuralına benzer.
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:
- İşareti UnsupportedOSPlatformAttribute veya ObsoletedOSPlatformAttribute ile yaparak çağrı yerini, engellenmiş sürümü içermeyen işletim sistemleriyle kısıtlayın.
-
System.OperatingSystem çağrıyı, örneğin
if (!OperatingSystem.IsLinux())gibi API'leri kullanarak koruyun. - UnsupportedOSPlatformGuardAttribute veya SupportedOSPlatformGuardAttribute ile açıklama eklenmiş veya olumsuzlanmış bir API kullanarak çağrıyı koruyun.
Ö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ı noktasına çağrılan yöntemin kullanımdan kalktığı 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 noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none
Bu kural kategorisinin tamamını devre dışı bırakmak için, kategorinin önem derecesini noneyapı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.