Delen via


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 8 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 naam OperatingSystem.Is<PlatformName>[VersionAtLeast](). De guard-methode OperatingSystem.IsWindows() wordt bijvoorbeeld toegevoegd Windows 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

  • Solarisis een onbekende platformnaam omdat deze niet is opgenomen in de standaardlijst MSBuild SupportedPlatforms en er is geen guard-methode met de naam OperatingSystem.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, zoals System.OperatingSystem.IsLinuxVersionAtLeast(int,int) voor het Linux 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 Android10 geen geldige versie, maar 10.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.

Zie ook