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 denominatiOperatingSystem.Is<PlatformName>[VersionAtLeast]()
. Ad esempio, il metodo OperatingSystem.IsWindows() guard aggiungeWindows
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 denominatoOperatingSystem.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 comeSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)
per laLinux
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, ma10.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.