Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA1418 |
| Заголовок | Проверка совместимости платформ |
| Категория | Совместимость |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Как предупреждение |
| Применимые языки | C# и Visual Basic |
Причина
Анализатор совместимости платформ требует указать действительное имя и версию платформы. О нарушениях сообщается, если строка платформы, предоставленная конструктору OSPlatformAttribute, состоит из неизвестного имени платформы или необязательная часть версии является недопустимой.
Описание правила
Атрибуты совместимости платформы, производные от OSPlatformAttribute, используют строковые литералы для имен платформ операционной системы (ОС) с необязательной частью версии. Строка должна состоять из известного имени платформы без указания части версии или с указанием допустимой части.
Список известных имен платформ заполняется из двух источников:
Часть
PlatformNameметодов охраны OperatingSystem с именемOperatingSystem.Is<PlatformName>[VersionAtLeast](). Например, метод-защита OperatingSystem.IsWindows() добавляетWindowsв список известных имен платформ.Группа элементов MSBuild проекта, включающая элементы
SupportedPlatformи список MSBuild SupportedPlatforms по умолчанию. Это относящиеся к проекту знания об известных платформах. Это позволяет авторам библиотек классов добавлять дополнительные платформы в список известных платформ. Например:<ItemGroup> <SupportedPlatform Include="PlatformName" /> </ItemGroup>
Если строка платформы содержит версию, она должна быть допустимой Version в следующем формате: major.minor[.build[.revision]].
Нарушения
Solaris— это неизвестное имя платформы, поскольку оно не входит в список MSBuild SupportedPlatforms по умолчанию и не существует метода условия с именемOperatingSystem.IsSolaris()в классе OperatingSystem.[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }Androidявляется известной платформой, так как существует защитный метод OperatingSystem.IsAndroid() типа OperatingSystem. Однако часть версии не является допустимой. Она должна содержать по крайней мере два целых числа, разделенных точкой.[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— это известная платформа, поскольку она входит в список MSBuild SupportedPlatforms по умолчанию, и существует метод-защита с именем OperatingSystem.IsLinux(). Однако для платформыLinuxне существуют версионные методы защиты, такие какSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int), поэтому версия не поддерживается в Linux.[SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { }
Устранение нарушений
Измените платформу на известное название платформы.
Если имя платформы указано правильно и вы хотите сделать его известной платформой, добавьте его в список MSBuild SupportedPlatforms в файле проекта:
<ItemGroup> <SupportedPlatform Include="Solaris" /> </ItemGroup>[SupportedOSPlatform("Solaris")] // No warning public void SolarisApi() { }Исправьте недопустимую версию. Например, для
Android10не является допустимой версией, а10.0является.// 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() { }Если платформа не поддерживает версию, удалите часть версии.
// 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() { }
Когда лучше отключить предупреждения
Не рекомендуется использовать неизвестное имя платформы или недопустимую версию, поэтому не следует подавлять это правило.