CA1418: Platform uyumluluğunu doğrulama
Özellik | Değer |
---|---|
Kural Kimliği | CA1418 |
Başlık | Platform uyumluluğunu doğrula |
Kategori | Birlikte çalışabilirlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 8'de varsayılan olarak etkin | Uyarı olarak |
Neden
Platform uyumluluk çözümleyicisi geçerli bir platform adı ve sürümü gerektirir. Oluşturucuya sağlanan platform dizesi bilinmeyen bir platform adından OSPlatformAttribute oluşuyorsa veya isteğe bağlı sürüm bölümü geçersizse ihlaller bildirilir.
Kural açıklaması
'den OSPlatformAttribute türetilen platform uyumluluk öznitelikleri, isteğe bağlı sürüm bölümüyle işletim sistemi (OS) platform adları için dize değişmez değerlerini kullanır. Dize, bilinen bir platform adından oluşmalıdır ve sürüm parçası veya geçerli bir sürüm bölümü olmamalıdır.
Bilinen platform adları listesi iki yerden doldurulur:
PlatformName
guard yöntemlerinin OperatingSystem adlıOperatingSystem.Is<PlatformName>[VersionAtLeast]()
bölümü. Örneğin, guard yöntemi OperatingSystem.IsWindows() bilinen platform adları listesine eklerWindows
.Varsayılan MSBuild SupportedPlatforms listesi de dahil olmak üzere projenin MSBuild öğe grubu
SupportedPlatform
. Bu, bilinen platformlar hakkında projeye özgü bilgilerdir. Sınıf kitaplığı yazarlarının bilinen platformlar listesine daha fazla platform eklemesine olanak tanır. Örneğin:<ItemGroup> <SupportedPlatform Include="PlatformName" /> </ItemGroup>
Platform dizesi bir sürüm bölümü içeriyorsa, şu biçimde geçerli Version olmalıdır: major.minor[.build[.revision]]
.
Ihlal
Solaris
bilinmeyen bir platform adıdır çünkü varsayılan MSBuild SupportedPlatforms listesine dahil değildir ve sınıfında adlıOperatingSystem.IsSolaris()
OperatingSystem bir guard yöntemi yoktur.[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }
Android
türünde bir koruma yöntemi OperatingSystem olduğundan bilinen bir OperatingSystem.IsAndroid() platformdur. Ancak, sürüm bölümü geçerli bir sürüm değildir. Noktayla ayrılmış en az iki tamsayı olmalıdır.[UnsupportedOSPlatform("Android10")] // Warns: Version '10' is not valid for platform 'Android'. Use a version with 2-4 parts for this platform. public void DoesNotWorkOnAndroid() { }
Linux
, varsayılan MSBuild SupportedPlatforms listesine eklendiğinden ve adlı OperatingSystem.IsLinux()bir guard yöntemi olduğundan bilinen bir platformdur. Ancak, platform içinLinux
gibiSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)
bir sürüme sahip koruma yöntemi yoktur, bu nedenle Linux'ta sürüm bölümü desteklenmez.[SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { }
İhlalleri düzeltme
Platformu bilinen bir platform adıyla değiştirin.
Platform adı doğruysa ve bunu bilinen bir platform yapmak istiyorsanız, bunu proje dosyanızdaki MSBuild SupportedPlatforms listesine ekleyin:
<ItemGroup> <SupportedPlatform Include="Solaris" /> </ItemGroup>
[SupportedOSPlatform("Solaris")] // No warning public void SolarisApi() { }
Geçersiz sürümü düzeltin. Örneğin, için
Android
10
geçerli bir sürüm değildir, ancak10.0
geçerlidir.// Before [UnsupportedOSPlatform("Android10")] // Warns: Version '10' is not valid for platform 'Android'. Use a version with 2-4 parts for this platform. public void DoesNotWorkOnAndroid() { } // After [UnsupportedOSPlatform("Android10.0")] // No warning. public void DoesNotWorkOnAndroid() { }
Platform bir sürümü desteklemiyorsa sürüm bölümünü kaldırın.
// Before [SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { } // After [SupportedOSPlatform("Linux")] // No warning. public void LinuxApi() { }
Uyarıların ne zaman bastırılması gerekiyor?
Bilinmeyen bir platform adı veya geçersiz bir sürüm kullanılması önerilmez, bu nedenle bu kuralı gizlememelisiniz.