CA1418: Weryfikowanie zgodności platformy
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1418 |
Tytuł | Weryfikowanie zgodności platformy |
Kategoria | Współdziałanie |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako ostrzeżenie |
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 literałów ciągu dla nazw platformy systemu operacyjnego z opcjonalną częścią wersji. Ciąg powinien składać się ze znanej nazwy platformy i nie zawiera części wersji lub prawidłowej części wersji.
Lista znanych nazw platform jest wypełniana z dwóch miejsc:
Część
PlatformName
OperatingSystem metod ochrony o nazwieOperatingSystem.Is<PlatformName>[VersionAtLeast]()
. Na przykład metoda OperatingSystem.IsWindows() guard dodajeWindows
do listy znanych nazw platform.Grupa
SupportedPlatform
elementów MSBuild projektu obejmująca domyślną listę MSBuild SupportedPlatforms. Jest to specyficzna wiedza na temat znanych platform. 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 regulaminu
Solaris
jest nieznaną nazwą platformy, ponieważ nie jest ona uwzględniona na domyślnej liście MSBuild SupportedPlatforms i nie ma metody ochrony o nazwieOperatingSystem.IsSolaris()
w OperatingSystem klasie .[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }
Android
jest znaną platformą OperatingSystem.IsAndroid() , ponieważ w typie OperatingSystem istnieje metoda ochrony. 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() { }
Linux
jest 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 jakSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)
dlaLinux
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 parametru
Android
10
nie jest prawidłową wersją, ale10.0
jest prawidłowa.// 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ń część 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.