Você pode adicionar isso para obter mais informações sobre o sistema operacional, há outra propriedade nesse pacote: System.Runtime.InteropServices.RuntimeInformation.OSDescription- retorna a descrição do sistema operacional com a versão, etc.
Oleksii Vynnychenko
15
1 embora eu não goste desta resposta. Por que eles não podem apenas implementar System.Environment.OSVersion.Platformpara consistência?
leppie
2
Observe que as constantes não representam todos os sistemas operacionais com suporte. É possível testar outros sistemas operacionais, usando IsOSPlatform(OSPlatform.Create("FreeBSD"))se eles são suportados agora ou podem ser adicionados no futuro. No entanto, não está muito claro qual seria uma abordagem segura para quais strings passariam (por exemplo, maiúsculas e minúsculas são importantes ou "bsd"correspondem a ambos "FreeBSD"e "NetBSD"?). Veja a discussão sobre esse recurso aqui .
NightOwl888
37
System.Environment.OSVersion.Platform pode ser usado em .NET Framework e Mono completos, mas:
A detecção do Mac OS X quase nunca funcionou para mim no Mono
não é implementado no .NET Core
System.Runtime.InteropServices.RuntimeInformation pode ser usado no .NET Core, mas:
não está implementado em .NET Framework e Mono completos
ele não realiza detecção de plataforma em tempo de execução, mas usa informações codificadas em seu lugar
(consulte o problema nº 3032 da corefx para obter mais detalhes)
Você pode identificar funções não gerenciadas específicas da plataforma, como uname():
pode causar falha de segmentação em plataformas desconhecidas
não é permitido em alguns projetos
Portanto, minha solução sugerida (veja o código abaixo) pode parecer tola no início, mas:
Agradeço seu esforço. Gostaria que houvesse alguma consistência no futuro.
leppie
6
System.Runtime.InteropServices.RuntimeInformation deve funcionar corretamente em .net completo agora (desde novembro), de modo que parece ser a forma "certa" aceita agora. Não tenho certeza sobre o mono, mas como eles estão pegando algum código direto do .net agora que é open source, é apenas uma questão de tempo antes que ele funcione lá, se já não estiver.
GrandOpener de
1
Path.DirectorySeparatorChar Pode ser usado para determinar se é uma máquina Windows ou * nix.
Kiran de
InteropServices são muito estranhos. No VStudio e no Rider, às vezes recebo "Desconhecido neste contexto" ou ele compila. Não
Respostas:
Método
Possível Argumento
Exemplo
Atualizar
Graças ao comentário de Oleksii Vynnychenko
Você pode obter o nome e a versão do sistema operacional como uma string usando
Por exemplo,
osNameAndVersion
seriaMicrosoft Windows 10.0.10586
fonte
System.Runtime.InteropServices.RuntimeInformation.OSDescription
- retorna a descrição do sistema operacional com a versão, etc.System.Environment.OSVersion.Platform
para consistência?IsOSPlatform(OSPlatform.Create("FreeBSD"))
se eles são suportados agora ou podem ser adicionados no futuro. No entanto, não está muito claro qual seria uma abordagem segura para quais strings passariam (por exemplo, maiúsculas e minúsculas são importantes ou"bsd"
correspondem a ambos"FreeBSD"
e"NetBSD"
?). Veja a discussão sobre esse recurso aqui .System.Environment.OSVersion.Platform
pode ser usado em .NET Framework e Mono completos, mas:System.Runtime.InteropServices.RuntimeInformation
pode ser usado no .NET Core, mas:(consulte o problema nº 3032 da corefx para obter mais detalhes)
Você pode identificar funções não gerenciadas específicas da plataforma, como
uname()
:Portanto, minha solução sugerida (veja o código abaixo) pode parecer tola no início, mas:
fonte