Formação .NET Carreiras Cursos Eventos Blog

Clique em qualquer espaço vazio ou Esc para fechar

Entrar
Ver Planos
Ver Planos Entrar
Página Principal
Formação .NET
Carreiras
Todos os Cursos
Agenda
Blog
Início
Blog
Platform Specific no .NET
Backend
Platform Specific no .NET
20/01/2022
André Baltieri

O .NET suporta diferentes plataformas como Windows, Mac e Linux, mas você sabe como criar um código específico para uma delas?

OperatingSystem

O .NET 6 traz ainda mais plataformas para ampliar o leque, contando com iOS, Android, MacCatalyst e muito mais.

Isto nos permite criar sistemas para múltiplas plataformas com o mesmo codebase e muitas vezes sem precisar alterar nada do código.

Porém, em alguns casos queremos executar determinadas ações somente em uma (Ou mais de uma) plataforma específica, e para isto temos o OperatingSystem, um enumerador que podemos indagar sobre qual SO estamos utilizando.

if (OperatingSystem.IsWindows())
    Console.WriteLine("Estou no Windows");

if (OperatingSystem.IsMacOS())
    Console.WriteLine("Estou no Mac");

O OperatingSystem tem todos as plataformas suportadas pelo .NET e futuras plataformas, quando adicionadas, também serão visíveis aqui.

SupportedOSPlatform

Além do OperatingSystem podemos utilizar o atributo SupportedOSPlatform que adiciona um warning a nível de compilação dizendo que um método só pode se executado em determinadas plataformas.

Algumas IDEs como o JetBrain Raider e Visual Studio já interpretam este alerta e notificam em tempo de escrita que a chamada ao método é inválida.

Em caso de invocação de um método não suportado pela plataforma atual, o warning abaixo será exibido.

 warning CA1416: This call site is reachable on all platforms. 'CustomFileWriter.WindowsOnly()' is only supported on: 'windows'. 

Neste exemplo estou no Mac e criei um método com atributo SupportedOSPlatform informando que o mesmo só suporta a plataforma Windows, como mostrado abaixo.

using System.Runtime.Versioning;

[SupportedOSPlatform("windows")]
public void WindowsOnly()
{
    //...
}

Suportando múltiplas plataformas

O atributo SupportedOSPlatform é cumulativo, o que significa que podemos suportar diferentes plataformas em um mesmo atributo, como mostrado no exemplo abaixo.

using System.Runtime.Versioning;

[SupportedOSPlatform("windows"), SupportedOSPlatform("macos")]
public void WindowsAndMac()
{
}

Por fim, aqui vai o exemplo completo, suportando Mac, Windows e ambos. Infelizmente não existe um enumerador com o nome das plataformas, é preciso informá-las como string, o que pode conter erros.

using System.Runtime.Versioning;

public class CustomFileWriter
{
    [SupportedOSPlatform("windows")]
    public void WindowsOnly()
    {
    }
    
    [SupportedOSPlatform("macos")]
    public void MacOnly()
    {
    }
    
    [SupportedOSPlatform("windows"), SupportedOSPlatform("macos")]
    public void WindowsAndMac()
    {
    }
}

Conclusão

O .NET suporta múltiplas plataformas e embora possamos escrever a maior parte do código de forma bem genérica, alguns pontos ainda precisam ser específicos, então podemos fazer uso do OperatingSystem e SupportedOSPlatform para resolver este problema.

Conheça o autor

André Baltieri

Microsoft MVP

Me dedico ao desenvolvimento de software desde 2003, sendo minha maior especialidade o Desenvolvimento Web. Durante esta jornada pude trabalhar presencialmente aqui no Brasil e Estados Unidos, atender remotamente times da ?ndia, Inglaterra e Holanda, receber 8x Microsoft MVP e realizar diversas consultorias em empresas e projetos de todos os tamanhos.

Mais popular

1

Blazor Render Modes

Frontend

2

Blazor - Rotas e Navegação

Frontend

3

Uma visão geral do Blazor

Frontend

Assine nossa Newsletter

Inscreva-se em nossa newsletter e seja o primeiro a receber atualizações sobre novos cursos, dicas de carreira, e conteúdos exclusivos em programação. Junte-se à nossa comunidade de aprendizado e impulsione sua trajetória profissional! Não perca essa oportunidade. Inscreva-se agora e comece a transformar seu futuro!

Alves & Baltieri Informática LTDA ME 21.108.579/0001-80
Sobre Como funciona Seja premium Blog
Conteúdo Formação .NET Carreiras Cursos Eventos
Suporte Termos de uso Política de privacidade Política de cancelamento Contato
Redes Sociais Youtube Discord LinkedIn Instagram Facebook

© balta.io 2013 - 2025 | Todos os direitos reservados

An unhandled error has occurred. Reload 🗙