Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| Eigenschaft | Wert |
|---|---|
| Regel-ID | CA1418 |
| Titel | Plattformkompatibilität überprüfen |
| Kategorie | Interoperabilität |
| Fix führt zu Unterbrechungen oder bleibt funktionsfähig | Untrennbar |
| Standardmäßig in .NET 10 aktiviert | Als Warnung |
| Anwendbare Sprachen | C# und Visual Basic |
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:
Der
PlatformName-Teil der OperatingSystem-Schutzmethoden mit dem NamenOperatingSystem.Is<PlatformName>[VersionAtLeast](). Beispielsweise fügt die Schutzmethode OperatingSystem.IsWindows()Windowsder Liste der bekannten Plattformnamen hinzu.Die MSBuild-Elementgruppe von
SupportedPlatform-Elementen 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
Solarisist 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() { }Androidist 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() { }Linuxist 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() { }
So beheben Sie Verstöße
Ändern Sie die Plattform zu einem 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
Android,10keine gültige Version, aber10.0ist 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.