CA1418: Verifiera plattformskompatibilitet
Property | Värde |
---|---|
Regel-ID | CA1418 |
Title | Verifiera plattformskompatibilitet |
Kategori | Samverkan |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som varning |
Orsak
Plattformskompatibilitetsanalyseraren kräver ett giltigt plattformsnamn och en giltig version. Överträdelser rapporteras om plattformssträngen OSPlatformAttribute som tillhandahålls konstruktorn består av ett okänt plattformsnamn eller om den valfria versionsdelen är ogiltig.
Regelbeskrivning
Plattformskompatibilitetsattribut som härleds från OSPlatformAttribute använda strängliteraler för operativsystemplattformsnamn (OS) med en valfri versionsdel. Strängen ska bestå av ett känt plattformsnamn och antingen ingen versionsdel eller en giltig versionsdel.
Listan med kända plattformsnamn fylls i från två platser:
Den
PlatformName
del av OperatingSystem skyddsmetoderna som heterOperatingSystem.Is<PlatformName>[VersionAtLeast]()
. Till exempel läggerWindows
guard-metoden OperatingSystem.IsWindows() till listan med kända plattformsnamn.Projektets MSBuild-objektgrupp med
SupportedPlatform
objekt, inklusive standardlistan MSBuild SupportedPlatforms. Det här är projektspecifik kunskap om kända plattformar. Det gör att klassbiblioteksförfattare kan lägga till fler plattformar i listan över kända plattformar. Till exempel:<ItemGroup> <SupportedPlatform Include="PlatformName" /> </ItemGroup>
Om plattformssträngen innehåller en versionsdel bör den vara giltig Version med följande format: major.minor[.build[.revision]]
.
Kränkningar
Solaris
är ett okänt plattformsnamn eftersom det inte ingår i standardlistan MSBuild SupportedPlatforms och det inte finns någon skyddsmetod med namnetOperatingSystem.IsSolaris()
i OperatingSystem klassen.[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }
Android
är en känd plattform eftersom det finns en OperatingSystem.IsAndroid() skyddsmetod i OperatingSystem typen . Versionsdelen är dock inte en giltig version. Det bör ha minst två heltal avgränsade med en punkt.[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
är en känd plattform eftersom den ingår i standardlistan MSBuild SupportedPlatforms och det finns även en skyddsmetod med namnet OperatingSystem.IsLinux(). Det finns dock inga versionshanterade skyddsmetoder somSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)
förLinux
plattformen, därför stöds ingen versionsdel i Linux.[SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { }
Så här åtgärdar du överträdelser
Ändra plattformen till ett känt plattformsnamn.
Om plattformsnamnet är korrekt och du vill göra det till en känd plattform lägger du till det i listan MSBuild SupportedPlatforms i projektfilen:
<ItemGroup> <SupportedPlatform Include="Solaris" /> </ItemGroup>
[SupportedOSPlatform("Solaris")] // No warning public void SolarisApi() { }
Åtgärda den ogiltiga versionen. För ,
10
är till exempelAndroid
inte en giltig version, men10.0
är giltig.// 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() { }
Om plattformen inte stöder en version tar du bort versionsdelen.
// 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() { }
När du ska ignorera varningar
Vi rekommenderar inte att du använder ett okänt plattformsnamn eller en ogiltig version, så du bör inte ignorera den här regeln.