CA1418: Ověření kompatibility platformy
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1418 |
Název | Ověřit kompatibilitu platformy |
Kategorie | Vzájemná funkční spolupráce |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | Jako upozornění |
Příčina
Analyzátor kompatibility platformy vyžaduje platný název a verzi platformy. Porušení se hlásí, pokud se řetězec platformy zadaný konstruktoru OSPlatformAttribute skládá z neznámého názvu platformy nebo pokud je volitelná část verze neplatná.
Popis pravidla
Atributy kompatibility platformy odvozené z OSPlatformAttribute řetězcových literálů pro názvy platforem operačního systému (OS) s volitelnou částí verze. Řetězec by se měl skládat ze známého názvu platformy a buď žádné části verze, nebo platné části verze.
Seznam známých názvů platforem se vyplní ze dvou míst:
Část
PlatformName
metod OperatingSystem ochrany s názvemOperatingSystem.Is<PlatformName>[VersionAtLeast]()
. Například metoda OperatingSystem.IsWindows() guard se přidáWindows
do seznamu známých názvů platforem.Skupina položek MSBuild projektu, včetně výchozího seznamu podporovanýchplatforms
SupportedPlatform
nástroje MSBuild. Toto je znalost známých platforem specifická pro projekt. Umožňuje autorům knihoven tříd přidat do seznamu známých platforem další platformy. Příklad:<ItemGroup> <SupportedPlatform Include="PlatformName" /> </ItemGroup>
Pokud řetězec platformy obsahuje část verze , měla by být platná Version s následujícím formátem: major.minor[.build[.revision]]
.
Porušení
Solaris
je neznámý název platformy, protože není součástí výchozího seznamu MSBuild SupportedPlatforms a neexistuje žádná metoda ochrany pojmenovanáOperatingSystem.IsSolaris()
ve OperatingSystem třídě.[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }
Android
je známá platforma, protože typ používá metodu OperatingSystem.IsAndroid() OperatingSystem ochrany. Část verze však není platná verze. Měla by obsahovat aspoň dvě celá čísla oddělená tečkou.[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
je známá platforma, protože je součástí výchozího seznamu MSBuild SupportedPlatforms a existuje také metoda stráže s názvem OperatingSystem.IsLinux(). Neexistují však žádné metody ochrany verzí, jakoSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)
je například pro platformuLinux
, a proto se v Linuxu nepodporuje žádná část verze.[SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { }
Jak opravit porušení
Změňte platformu na známý název platformy.
Pokud je název platformy správný a chcete ji nastavit jako známou platformu, přidejte ji do seznamu MSBuild SupportedPlatforms v souboru projektu:
<ItemGroup> <SupportedPlatform Include="Solaris" /> </ItemGroup>
[SupportedOSPlatform("Solaris")] // No warning public void SolarisApi() { }
Opravte neplatnou verzi. Například pro
Android
,10
není platná verze, ale10.0
je platná.// 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() { }
Pokud platforma nepodporuje verzi, odeberte část verze.
// 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() { }
Kdy potlačit upozornění
Použití neznámého názvu platformy nebo neplatné verze se nedoporučuje, proto byste toto pravidlo neměli potlačit.