Aracılığıyla paylaş


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:

Ö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 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.

Ayrıca bkz.