Udostępnij za pośrednictwem


CA1418: Weryfikowanie zgodności platformy

Właściwości Wartość
Identyfikator reguły CA1418
Tytuł Weryfikowanie zgodności platformy
Kategoria Współdziałanie
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Jako ostrzeżenie
Zastosowane języki C# i Visual Basic

Przyczyna

Analizator zgodności platformy wymaga prawidłowej nazwy i wersji platformy. Naruszenia są zgłaszane, jeśli ciąg platformy dostarczony do OSPlatformAttribute konstruktora składa się z nieznanej nazwy platformy lub jeśli opcjonalna część wersji jest nieprawidłowa.

Opis reguły

Atrybuty zgodności platformy pochodzące z OSPlatformAttribute używają literałów ciągów dla nazw platform systemów operacyjnych z opcjonalnym wskazaniem wersji. Ciąg powinien składać się ze znanej nazwy platformy i nie zawiera części wersji lub prawidłowej części wersji.

Lista ustalonych nazw platform jest tworzona z dwóch źródeł:

  • Część metod ochrony PlatformNameOperatingSystem, o nazwie OperatingSystem.Is<PlatformName>[VersionAtLeast](). Na przykład metoda guard OperatingSystem.IsWindows() dodaje Windows do listy znanych nazw platform.

  • Grupa SupportedPlatform elementów MSBuild projektu obejmująca domyślną listę wspieranych platform przez MSBuild. Jest to wiedza specyficzna dla projektu dotycząca znanych platformach. Umożliwia autorom bibliotek klas dodawanie kolejnych platform do listy znanych platform. Na przykład:

      <ItemGroup>
        <SupportedPlatform Include="PlatformName" />
      </ItemGroup>
    

Jeśli ciąg platformy zawiera część wersji , powinien być prawidłowy Version w następującym formacie: major.minor[.build[.revision]].

Naruszenia

  • Solarisjest nieznanąnazwą platformy, ponieważ nie jest ona uwzględniona na domyślnej liście MSBuild SupportedPlatforms i nie ma metody ochrony o nazwie OperatingSystem.IsSolaris() w OperatingSystem klasie .

    [SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name.
    public void SolarisApi() { }
    
  • Android jest znaną platformą, ponieważ w typie OperatingSystem istnieje OperatingSystem.IsAndroid() metoda zabezpieczająca. Jednak część wersji nie jest prawidłową wersją. Powinna zawierać co najmniej dwie liczby całkowite oddzielone kropką.

    [UnsupportedOSPlatform("Android10")] // Warns: Version '10' is not valid for platform 'Android'. Use a version with 2-4 parts for this platform.
    public void DoesNotWorkOnAndroid() { }
    
  • Linuxjest znaną platformą, ponieważ jest ona zawarta na domyślnej liście MSBuild SupportedPlatforms i istnieje również metoda ochrony o nazwie OperatingSystem.IsLinux(). Nie ma jednak żadnych metod ochrony w wersji, takich jak System.OperatingSystem.IsLinuxVersionAtLeast(int,int) dla Linux platformy, dlatego żadna część wersji nie jest obsługiwana w systemie Linux.

    [SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform.
    public void LinuxApi() { }
    

Jak naprawić naruszenia

  • Zmień platformę na znaną nazwę platformy.

  • Jeśli nazwa platformy jest poprawna i chcesz, aby była znana platforma, dodaj ją do listy MSBuild SupportedPlatforms w pliku projektu:

      <ItemGroup>
        <SupportedPlatform Include="Solaris" />
      </ItemGroup>
    
    [SupportedOSPlatform("Solaris")] // No warning
    public void SolarisApi() { }
    
  • Napraw nieprawidłową wersję. Na przykład dla Android10 nie jest prawidłową wersją, ale 10.0 jest prawidłową.

    // 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() { }
    
  • Jeśli platforma nie obsługuje wersji, usuń element wersji.

    // 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() { }
    

Kiedy pomijać ostrzeżenia

Nie zaleca się używania nieznanej nazwy platformy lub nieprawidłowej wersji, dlatego nie należy pomijać tej reguły.

Zobacz też