Sdílet prostřednictvím


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 10 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 SupportedPlatform podporovanýchplatforms 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í, 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é