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 8 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ázvem OperatingSystem.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šování

  • 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 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() { }
    
  • Linuxje 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í, jako System.OperatingSystem.IsLinuxVersionAtLeast(int,int) je například pro platformu Linux , 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, ale 10.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.

Viz také