Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1418 |
| Název | Ověřit kompatibilitu platformy |
| Kategorie | Vzájemná funkční spolupráce |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Jako upozornění |
| Příslušné jazyky | C# a Visual Basic |
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 platforem odvozené z OSPlatformAttribute používají řetězcové literály pro názvy platforem operačních systémů (OS) s volitelnou verzí. Řetězec by se měl skládat ze známého názvu platformy a neobsahovat žádnou verzi nebo obsahovat platnou složku verze.
Seznam známých názvů platforem se vyplní ze dvou míst:
Část
PlatformNamemetod OperatingSystem ochrany s názvemOperatingSystem.Is<PlatformName>[VersionAtLeast](). Například metoda guard OperatingSystem.IsWindows() přidáWindowsdo seznamu známých názvů platforem.Skupina položek projektu MSBuild, včetně výchozího seznamu podporovaných platforem 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í
Solarisje 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() { }Androidje známá platforma, protože typ používá metodu OperatingSystem.IsAndroid()OperatingSystem ochrany. Část této verze není platná. 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() { }Linuxje známá platforma, protože je součástí výchozího seznamu MSBuild SupportedPlatforms, a existuje také metoda, která se nazývá OperatingSystem.IsLinux(). Neexistují však žádné metody ochrany verzí, jako jeSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)pro platformuLinux, a proto se na platformě Linux nepodporuje žádné verzování.[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,10není platná verze, ale10.0je 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 nějakou verzi, odstraňte příslušnou čá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.