Notatka
Dostęp do tej strony wymaga autoryzacji. Może 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 ł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 nazwieOperatingSystem.Is<PlatformName>[VersionAtLeast](). Na przykład metoda guard OperatingSystem.IsWindows() dodajeWindowsdo listy znanych nazw platform.Grupa
SupportedPlatformelementó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 nazwieOperatingSystem.IsSolaris()w OperatingSystem klasie .[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }Androidjest 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 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
Android10nie jest prawidłową wersją, ale10.0jest 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.