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.
.NET kod çözümleyici kuralı CA1416 , .NET 5'te başlayarak varsayılan olarak etkindir. İşletim sistemini doğrulamayan çağrı sitelerinden platforma özgü API'lere yapılan çağrılar için bir derleme uyarısı oluşturur.
Açıklama değiştirildi
.NET 5'den başlayarak .NET SDK'sı .NET kaynak kodu çözümleyicilerini içerir. Ca1416 da dahil olmak üzere bu kuralların bazıları varsayılan olarak etkindir. Projeniz bu kuralı ihlal eden bir kod içeriyorsa ve uyarıları hata olarak değerlendirecek şekilde yapılandırılmışsa, bu değişiklik derlemenizi bozabilir. KURAL CA1416, platform bağlamı doğrulanmamış yerlerdeki platforma özgü API'leri kullandığınızda sizi bilgilendirır.
Kural CA1416, platform uyumluluk çözümleyicisi, .NET 5'te yeni olan diğer bazı özelliklerle birlikte çalışır. .NET 5, bir API'nin SupportedOSPlatformAttribute desteklendiği veya UnsupportedOSPlatformAttribute platformları belirtmenize olanak tanıyan ve 'yi tanıtır. Bu özniteliklerin olmaması halinde tüm platformlarda bir API'nin desteklendiği varsayılır. Bu öznitelikler, çekirdek .NET kitaplıklarındaki platforma özgü API'lere uygulanmıştır.
Kullandıkları API'lerin kullanılamadığı platformları hedefleyen projelerde, ca1416 kuralı platform bağlamının doğrulanmamış olduğu platforma özgü API çağrılarını işaretler. Artık ve SupportedOSPlatformAttribute öznitelikleriyle UnsupportedOSPlatformAttribute süslenen API'lerin çoğu, desteklenmeyen bir işletim sisteminde çağrıldıklarında özel durumlar oluştururPlatformNotSupportedException. Artık bu API'ler platforma özgü olarak işaretlendiklerine göre , CA1416 kuralı çağrı sitelerinize işletim sistemi denetimleri ekleyerek çalışma zamanı PlatformNotSupportedException özel durumlarını önlemenize yardımcı olur.
Örnekler
Console.Beep(Int32, Int32) yöntemi yalnızca Windows'ta desteklenir ve ile
[SupportedOSPlatform("windows")]dekore edilmiştir. Aşağıdaki kod, proje hedef alıyorsa (platformlarnet5.0arası) derleme zamanında bir CA1416 uyarısı oluşturur. Ancak bu kod, projenin Windows'uniçin etkinleştirilip etkinleştirilmediğini uyarmaz. Uyarıyı önlemek için gerçekleştirebileceğiniz eylemler için bkz . Önerilen eylem.public void PlayCMajor() { Console.Beep(261, 1000); }Image.FromFile(String) yöntemi tarayıcıda desteklenmez ve ile
[UnsupportedOSPlatform("browser")]dekore edilmiştir. Aşağıdaki kod, proje tarayıcı platformunu destekliyorsa derleme zamanında bir CA1416 uyarısı oluşturur.public void CreateImage() { Image newImage = Image.FromFile("SampImag.jpg"); }İpucu
Blazor WebAssembly projeleri ve Razor sınıf kitaplığı projeleri otomatik olarak tarayıcı desteği içerir. Tarayıcıyı projeniz için desteklenen bir platform olarak el ile eklemek için proje dosyanıza aşağıdaki girdiyi ekleyin:
<ItemGroup> <SupportedPlatform Include="browser" /> </ItemGroup>
Sürüm kullanıma sunulmuştur
5.0
Önerilen eylem
Platforma özgü API'lerin yalnızca kod uygun bir platformda çalışırken çağrıldığından emin olun. Platforma özgü bir API'yi çağırmadan önce, sınıfındaki Is<Platform>System.OperatingSystemyöntemlerden birini OperatingSystem.IsWindows() kullanarak geçerli işletim sistemini de kontrol edebilirsiniz.
Deyim koşulunda Is<Platform> yöntemlerden birini if kullanabilirsiniz:
public void PlayCMajor()
{
if (OperatingSystem.IsWindows())
{
Console.Beep(261, 1000);
}
}
Ya da, çalışma zamanında ilave bir if deyiminin aşırı yükünü istemiyorsanız, bunun yerine Debug.Assert(Boolean) çağrısını yapın:
public void PlayCMajor()
{
Debug.Assert(OperatingSystem.IsWindows());
Console.Beep(261, 1000);
}
Kitaplık yazarsanız API'nizi platforma özgü olarak işaretleyebilirsiniz. Bu durumda, gereksinimleri denetleme yükü arayanlarınıza düşer. Belirli yöntemleri veya türleri ya da bütün bir derlemeyi işaretleyebilirsiniz.
[SupportedOSPlatform("windows")]
public void PlayCMajor()
{
Console.Beep(261, 1000);
}
Tüm arama sitelerinizi düzeltmek istemiyorsanız, uyarıyı engellemek için aşağıdaki seçeneklerden birini belirleyebilirsiniz:
Kuralı CA1416'yı engellemek için, bunu kullanarak veya NoWarn derleyici bayrağını kullanarak
#pragmaya da kuralın önem derecesininonebir .editorconfig dosyasında olarak ayarlayarak yapabilirsiniz.public void PlayCMajor() { #pragma warning disable CA1416 Console.Beep(261, 1000); #pragma warning restore CA1416 }Kod analizini tamamen devre dışı bırakmak için proje dosyanızda olarak
EnableNETAnalyzersayarlayınfalse. Daha fazla bilgi için bkz . EnableNETAnalyzers.
Etkilenen API’ler
Windows platformu için:
- konumunda listelenen tüm API'ler https://github.com/dotnet/designs/blob/main/accepted/2020/windows-specific-apis/windows-specific-apis.md.
- System.Security.Cryptography.DSAOpenSsl
- System.Security.Cryptography.ECDiffieHellmanOpenSsl
- System.Security.Cryptography.ECDsaOpenSsl
- System.Security.Cryptography.RSAOpenSsl
Blazor WebAssembly platformu için:
- konumunda listelenen tüm API'ler https://github.com/dotnet/runtime/issues/41087.