Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| 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 10 | 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ęść
PlatformNameOperatingSystem metod ochrony o nazwieOperatingSystem.Is<PlatformName>[VersionAtLeast](). Na przykład metoda OperatingSystem.IsWindows() guard dodajeWindowsdo listy znanych nazw platform.Grupa
SupportedPlatformelementó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
Solarisjest 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() { }Androidjest znaną, ponieważ w typie OperatingSystem.IsAndroid() 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() { }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 jakSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)dlaLinuxplatformy, 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
Android10nie jest prawidłową wersją, ale10.0jest 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.