CA1418: Platformkompatibilitás ellenőrzése
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1418 |
Cím | Platformkompatibilitás ellenőrzése |
Kategória | Együttműködési lehetőség |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 9-ben | Figyelmeztetésként |
Ok
A platformkompatibilitás-elemzőhöz érvényes platformnévre és verzióra van szükség. Szabálysértéseket jelent a rendszer, ha a OSPlatformAttribute konstruktornak megadott platformsztring ismeretlen platformnévből áll, vagy ha a választható verziórész érvénytelen.
Szabály leírása
A platformkompatibilitási attribútumok, amelyek az operációs rendszer (OS) platformneveinek sztringkonstansaiból OSPlatformAttribute származnak egy választható verziórészlel. A sztringnek egy ismert platformnévből kell állnia, és nem lehet verzió vagy érvényes verziórész.
Az ismert platformnevek listája két helyről töltődik fel:
Az
PlatformName
őrzési OperatingSystem módszerek neveOperatingSystem.Is<PlatformName>[VersionAtLeast]()
. A guard metódus OperatingSystem.IsWindows() például hozzáadjaWindows
az ismert platformnevek listájához.A projekt MSBuild elemcsoportja
SupportedPlatform
, beleértve az alapértelmezett MSBuild SupportedPlatforms listát. Ez az ismert platformok projektspecifikus ismerete. Ez lehetővé teszi, hogy az osztálykönyvtár-szerzők további platformokat vegyenek fel az ismert platformok listájára. Példa:<ItemGroup> <SupportedPlatform Include="PlatformName" /> </ItemGroup>
Ha a platform sztringje verziórészt tartalmaz, akkor érvényesnek kell lennie Version a következő formátumban: major.minor[.build[.revision]]
.
Megsértése
Solaris
ismeretlen platformnév, mert nem szerepel az alapértelmezett MSBuild SupportedPlatforms listában, és nincs az osztályban OperatingSystem elnevezettOperatingSystem.IsSolaris()
őrmetódus.[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }
Android
ismert platform, mert létezik egy OperatingSystem.IsAndroid() védelmi módszer a OperatingSystem típusban. A verziórész azonban nem érvényes verzió. Legalább két egész számnak kell lennie egy ponttal elválasztva.[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
ismert platform, mert szerepel az alapértelmezett MSBuild SupportedPlatforms listában, és van egy őrmetódus is.OperatingSystem.IsLinux() A platformhozLinux
hasonlóSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)
verziójú védelmi módszerek azonban nem léteznek, ezért linuxos verziós rész nem támogatott.[SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { }
Szabálysértések kijavítása
Módosítsa a platformot egy ismert platformnévre.
Ha a platform neve helyes, és ismert platformként szeretné beállítani, vegye fel a projektfájl MSBuild SupportedPlatforms listájára:
<ItemGroup> <SupportedPlatform Include="Solaris" /> </ItemGroup>
[SupportedOSPlatform("Solaris")] // No warning public void SolarisApi() { }
Javítsa ki az érvénytelen verziót. Például nem
Android
10
érvényes verzió, hanem10.0
érvényes.// 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() { }
Ha a platform nem támogatja a verziót, távolítsa el a verziórészt.
// 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() { }
Mikor kell letiltani a figyelmeztetéseket?
Ismeretlen platformnév vagy érvénytelen verzió használata nem ajánlott, ezért ne tiltsa le ezt a szabályt.