CA1418: Convalidare la compatibilità della piattaforma

Proprietà valore
ID regola CA1418
Title Convalida compatibilità della piattaforma
Categoria Interoperabilità
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 Come avviso

Causa

L'analizzatore di compatibilità della piattaforma richiede un nome e una versione validi per la piattaforma. Le violazioni vengono segnalate se la stringa della piattaforma fornita al OSPlatformAttribute costruttore è costituita da un nome di piattaforma sconosciuto o se la parte della versione facoltativa non è valida.

Descrizione regola

Gli attributi di compatibilità della piattaforma derivati dall'uso OSPlatformAttribute di valori letterali stringa per i nomi di piattaforma del sistema operativo (OS) con una parte di versione facoltativa. La stringa deve essere costituita da un nome di piattaforma noto e da nessuna parte della versione o da una parte di versione valida.

L'elenco dei nomi delle piattaforme note viene popolato da due posizioni:

  • Parte PlatformName dei OperatingSystem metodi di protezione denominati OperatingSystem.Is<PlatformName>[VersionAtLeast](). Ad esempio, il metodo OperatingSystem.IsWindows() guard aggiunge Windows all'elenco nomi di piattaforma noti.

  • Gruppo di SupportedPlatform elementi MSBuild del progetto, incluso l'elenco MSBuild SupportedPlatforms predefinito. Si tratta della conoscenza specifica del progetto delle piattaforme note. Consente agli autori di librerie di classi di aggiungere altre piattaforme nell'elenco delle piattaforme note. Ad esempio:

      <ItemGroup>
        <SupportedPlatform Include="PlatformName" />
      </ItemGroup>
    

Se la stringa della piattaforma contiene una parte della versione , deve essere valida Version con il formato seguente: major.minor[.build[.revision]].

Violazioni

  • Solarisè un nome di piattaforma sconosciuto perché non è incluso nell'elenco predefinito MSBuild SupportedPlatforms e non esiste alcun metodo di protezione denominato OperatingSystem.IsSolaris() nella OperatingSystem classe .

    [SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name.
    public void SolarisApi() { }
    
  • Android è una piattaforma nota perché è presente un OperatingSystem.IsAndroid() metodo guard nel OperatingSystem tipo . Tuttavia, la parte della versione non è una versione valida. Deve contenere almeno due numeri interi separati da un punto.

    [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è una piattaforma nota perché è inclusa nell'elenco predefinito MSBuild SupportedPlatforms ed è disponibile anche un metodo di protezione denominato OperatingSystem.IsLinux(). Tuttavia, non sono disponibili metodi di protezione con controllo delle versioni come System.OperatingSystem.IsLinuxVersionAtLeast(int,int) per la Linux piattaforma, pertanto non è supportata alcuna parte della versione in Linux.

    [SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform.
    public void LinuxApi() { }
    

Come correggere le violazioni

  • Modificare la piattaforma impostando un nome di piattaforma noto.

  • Se il nome della piattaforma è corretto e si vuole renderlo una piattaforma nota, aggiungerlo all'elenco MSBuild SupportedPlatforms nel file di progetto:

      <ItemGroup>
        <SupportedPlatform Include="Solaris" />
      </ItemGroup>
    
    [SupportedOSPlatform("Solaris")] // No warning
    public void SolarisApi() { }
    
  • Correggere la versione non valida. Ad esempio, per Android, 10 non è una versione valida, ma 10.0 è valida.

    // 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() { }
    
  • Se la piattaforma non supporta una versione, rimuovere la parte della versione.

    // 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() { }
    

Quando eliminare gli avvisi

Non è consigliabile usare un nome di piattaforma sconosciuto o una versione non valida, pertanto non è consigliabile eliminare questa regola.

Vedi anche