CA1418: Platformcompatibiliteit valideren
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1418 |
Titel | Platformcompatibiliteit valideren |
Categorie | Interoperabiliteit |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als waarschuwing |
Oorzaak
Voor de platformcompatibiliteitsanalyse is een geldige platformnaam en -versie vereist. Schendingen worden gerapporteerd als de platformtekenreeks die aan de OSPlatformAttribute constructor wordt verstrekt, bestaat uit een onbekende platformnaam of als het optionele versieonderdeel ongeldig is.
Beschrijving van regel
De platformcompatibiliteitskenmerken die zijn afgeleid van OSPlatformAttribute letterlijke tekenreeksen voor besturingssysteemplatformnamen (OS) met een optioneel versieonderdeel. De tekenreeks moet bestaan uit een bekende platformnaam en geen versieonderdeel of een geldig versieonderdeel.
De lijst met bekende platformnamen wordt gevuld vanaf twee locaties:
Het
PlatformName
deel van OperatingSystem de beveiligingsmethoden met de naamOperatingSystem.Is<PlatformName>[VersionAtLeast]()
. De guard-methode OperatingSystem.IsWindows() wordt bijvoorbeeld toegevoegdWindows
aan de lijst met bekende platformnamen.De MSBuild-itemgroep van
SupportedPlatform
het project, inclusief de standaardlijst MSBuild SupportedPlatforms. Dit is de projectspecifieke kennis van bekende platforms. Hiermee kunnen auteurs van klassenbibliotheek meer platforms toevoegen aan de lijst met bekende platforms. Voorbeeld:<ItemGroup> <SupportedPlatform Include="PlatformName" /> </ItemGroup>
Als de platformtekenreeks een versieonderdeel bevat, moet deze een geldige Version indeling hebben: major.minor[.build[.revision]]
Schendingen
Solaris
is een onbekende platformnaam omdat deze niet is opgenomen in de standaardlijst MSBuild SupportedPlatforms en er is geen guard-methode met de naamOperatingSystem.IsSolaris()
in de OperatingSystem klasse.[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }
Android
is een bekend platform omdat er een OperatingSystem.IsAndroid() beveiligingsmethode in het OperatingSystem type is. Het versieonderdeel is echter geen geldige versie. Deze moet ten minste twee gehele getallen bevatten, gescheiden door een punt.[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
is een bekend platform omdat het is opgenomen in de standaard MSBuild SupportedPlatforms-lijst, en er is ook een guard-methode met de naam OperatingSystem.IsLinux(). Er zijn echter geen versiebeheermethoden, zoalsSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)
voor hetLinux
platform, dus er wordt geen versieonderdeel ondersteund 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() { }
Schendingen oplossen
Wijzig het platform in een bekende platformnaam.
Als de platformnaam juist is en u het een bekend platform wilt maken, voegt u deze toe aan de lijst MSBuild SupportedPlatforms in uw projectbestand:
<ItemGroup> <SupportedPlatform Include="Solaris" /> </ItemGroup>
[SupportedOSPlatform("Solaris")] // No warning public void SolarisApi() { }
Corrik de ongeldige versie. Is bijvoorbeeld
Android
10
geen geldige versie, maar10.0
is geldig.// 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() { }
Als het platform geen versie ondersteunt, verwijdert u het versieonderdeel.
// 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() { }
Wanneer waarschuwingen onderdrukken
Het gebruik van een onbekende platformnaam of een ongeldige versie wordt niet aanbevolen, dus u moet deze regel niet onderdrukken.