Megosztás a következőn keresztül:


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 neve OperatingSystem.Is<PlatformName>[VersionAtLeast](). A guard metódus OperatingSystem.IsWindows() például hozzáadja Windows 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 elnevezett OperatingSystem.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() { }
    
  • Linuxismert platform, mert szerepel az alapértelmezett MSBuild SupportedPlatforms listában, és van egy őrmetódus is.OperatingSystem.IsLinux() A platformhoz Linux 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 Android10 érvényes verzió, hanem 10.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.

Lásd még