Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| Propriedade | valor |
|---|---|
| ID da regra | CA1418 |
| Título | Validar a compatibilidade da plataforma |
| Categoria | Interoperabilidade |
| A correção causa interrupção ou não | Ininterrupto |
| Habilitado por padrão no .NET 10 | Como aviso |
| Línguas aplicáveis | C# e Visual Basic |
Motivo
O analisador de compatibilidade de plataforma requer um nome e uma versão válidos da plataforma. As violações são relatadas se a cadeia de caracteres da plataforma fornecida ao OSPlatformAttribute construtor consistir em um nome de plataforma desconhecido ou se a parte da versão opcional for inválida.
Descrição da regra
Os atributos de compatibilidade de plataforma derivados de OSPlatformAttribute utilizam literais de cadeia de caracteres para os nomes das plataformas do sistema operacional (SO), com uma parte de versão opcional. A cadeia de caracteres deve ser composta por um nome de plataforma já conhecido e pode não ter parte de versão ou ter uma parte de versão válida.
A lista de nomes de plataforma conhecidos é preenchida a partir de dois locais:
A
PlatformNameparte dos métodos de OperatingSystem guarda chamadaOperatingSystem.Is<PlatformName>[VersionAtLeast](). Por exemplo, o método OperatingSystem.IsWindows() guard adicionaWindowsà lista de nomes de plataforma conhecidos.O grupo de itens MSBuild do
SupportedPlatformprojeto, incluindo a lista padrão de MSBuild SupportedPlatforms. Este é o conhecimento de plataformas conhecidas específico do projeto. Ele permite que os autores da biblioteca de classes adicionem mais plataformas à lista de plataformas conhecidas. Por exemplo:<ItemGroup> <SupportedPlatform Include="PlatformName" /> </ItemGroup>
Se a cadeia de caracteres da plataforma contiver uma parte versão, deverá ser um Version válido com o seguinte formato: major.minor[.build[.revision]].
Violações
Solarisé um nome de plataforma desconhecido porque não está incluído na lista padrão MSBuild SupportedPlatforms e não há nenhum método de guarda chamadoOperatingSystem.IsSolaris()na classe OperatingSystem.[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }Androidé uma plataforma conhecida porque existe um OperatingSystem.IsAndroid() método de guarda no OperatingSystem tipo. No entanto, a parte da versão não é uma versão válida. Deve ter pelo menos dois inteiros separados por um ponto.[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é uma plataforma conhecida porque está incluída na lista padrão MSBuild SupportedPlatforms e também há um método de guarda chamado OperatingSystem.IsLinux(). No entanto, não existem métodos de proteção versionada comoSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)para a plataformaLinux, portanto, nenhuma parte da versão é suportada no Linux.[SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { }
Como corrigir violações
Altere a plataforma para um nome de plataforma conhecido.
Se o nome da plataforma estiver correto e você quiser torná-la uma plataforma conhecida, adicione-a à lista MSBuild SupportedPlatforms no arquivo de projeto:
<ItemGroup> <SupportedPlatform Include="Solaris" /> </ItemGroup>[SupportedOSPlatform("Solaris")] // No warning public void SolarisApi() { }Corrija a versão inválida. Por exemplo, para
Android,10não é uma versão válida, mas10.0é válida.// 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() { }Se a plataforma não suportar uma versão, remova a parte da versão.
// 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() { }
Quando suprimir avisos
O uso de um nome de plataforma desconhecido ou de uma versão inválida não é recomendado, portanto, você não deve suprimir essa regra.