CA1418: Überprüfender Plattformkompatibilität
Eigenschaft | Wert |
---|---|
Regel-ID | CA1418 |
Titel | Plattformkompatibilität überprüfen |
Kategorie | Interoperabilität |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | Als Warnung |
Ursache
Das Analyseprogramm für Plattformkompatibilität erfordert einen gültigen Plattformnamen und eine gültige Version. Verstöße werden gemeldet, wenn die an den OSPlatformAttribute-Konstruktor übergebene Plattformzeichenfolge aus einem unbekannten Plattformnamen besteht oder wenn der optionale Versionsteil ungültig ist.
Regelbeschreibung
Die von OSPlatformAttribute abgeleiteten Plattformkompatibilitätsattribute verwenden Zeichenfolgenliterale für Betriebssystem-Plattformnamen mit einem optionalen Versionsteil. Die Zeichenfolge sollte aus einem bekannten Plattformnamen und entweder keinem Versionsteil oder einem gültigen Versionsteil bestehen.
Die Liste der bekannten Plattformnamen wird aus zwei Quellen entnommen:
Dem
PlatformName
-Teil der OperatingSystem Schutzmethoden mit dem NamenOperatingSystem.Is<PlatformName>[VersionAtLeast]()
. Beispielsweise fügt die Schutzmethode OperatingSystem.IsWindows() der Liste der bekannten PlattformnamenWindows
hinzu.Der MSBuild-Elementgruppe der
SupportedPlatform
-Elemente des Projekts, einschließlich der Standardliste MSBuild SupportedPlatforms. Dies ist das projektspezifische Wissen über bekannte Plattformen. Dadurch können Klassenbibliotheksautoren der Liste der bekannten Plattformen weitere Plattformen hinzufügen. Beispiel:<ItemGroup> <SupportedPlatform Include="PlatformName" /> </ItemGroup>
Wenn die Plattformzeichenfolge einen Versionsteil enthält, sollte dies eine gültige Version im folgenden Format sein: major.minor[.build[.revision]]
.
Verletzungen
Solaris
ist ein unbekannter Plattformname, da er nicht in der Standardliste MSBuild SupportedPlatforms enthalten ist und es keine Schutzmethode mit dem NamenOperatingSystem.IsSolaris()
in der Klasse OperatingSystem gibt.[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }
Android
ist eine bekannte Plattform, weil es eine OperatingSystem.IsAndroid()-Schutzmethode im Typ OperatingSystem gibt. Der Versionsteil ist jedoch keine gültige Version. Er sollten mindestens zwei ganze Zahlen aufweisen, die durch einen Punkt getrennt sind.[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
ist eine bekannte Plattform, da sie in der Standardliste MSBuild SupportedPlatforms enthalten ist und es auch eine Schutzmethode mit dem Namen OperatingSystem.IsLinux() gibt. Es gibt jedoch keine Schutzmethoden mit Versionsangabe wieSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)
für dieLinux
-Plattform, daher wird unter Linux kein Versionsteil unterstützt.[SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { }
Behandeln von Verstößen
Ändern Sie die Plattform in einen bekannten Plattformnamen.
Wenn der Plattformname richtig ist und Sie ihn zu einer bekannten Plattform machen möchten, fügen Sie ihn der Liste „MSBuild SupportedPlatforms“ in Ihrer Projektdatei hinzu:
<ItemGroup> <SupportedPlatform Include="Solaris" /> </ItemGroup>
[SupportedOSPlatform("Solaris")] // No warning public void SolarisApi() { }
Korrigieren Sie die ungültige Version. Beispielsweise ist für
Android
10
keine gültige Version, aber10.0
ist gültig.// 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() { }
Wenn die Plattform keine Version unterstützt, entfernen Sie den Versionsteil.
// 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() { }
Wann sollten Warnungen unterdrückt werden?
Die Verwendung eines unbekannten Plattformnamens oder einer ungültigen Version wird nicht empfohlen, daher sollten Sie diese Regel nicht unterdrücken.