CA1418: Validovat kompatibilitu platformy

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 PlatformName metod OperatingSystem ochrany s názvem OperatingSystem.Is<PlatformName>[VersionAtLeast](). Například metoda guard OperatingSystem.IsWindows() přidá Windows do 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í

  • 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 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() { }
    
  • Linux je 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 je System.OperatingSystem.IsLinuxVersionAtLeast(int,int) pro platformu Linux, 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, 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 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.

Viz také