Microsoft .NET

Saber o que é .NET ajuda muito quem vai começar uma aplicação, ainda mais uma das grandes, porque esse é um trabalho desafiador e toda ajuda é bem-vinda. Nos capítulos anteriores, vimos que o C# é uma linguagem madura, e parte dessa maturidade inclui trazer muita coisa pronta.

Em suma, temos uma base bem completa para iniciar nossas aplicações. Assim, podemos focar apenas no que precisamos para atender o negócio em que estamos trabalhando.

Este material foi escrito quando o .NET Core 3.1 era a versão atual e o .NET 5 ainda estava a caminho. Por isso, as versões citadas a seguir refletem esse momento da plataforma.

O que é um framework

Um framework é uma estrutura, um alicerce ou mesmo um conjunto de bibliotecas que usamos para construir nossas aplicações. O conceito existe em diversas tecnologias e linguagens.

No caso das linguagens da Microsoft, esse framework se chama .NET. Se quiser se aprofundar no conceito geral, o artigo sobre o que é um framework explica a ideia com mais detalhes.

A ideia por trás de um framework é entregar prontos os recursos que usamos com frequência no dia a dia. Por exemplo, leitura e escrita de arquivos, acesso a dados, gerenciamento de memória e muitos outros.

É comum começarmos o desenvolvimento de aplicações sobre um framework. Na verdade, não faz o menor sentido começar sem um e fazer tudo à mão.

Como você pode imaginar, um framework nos oferece reuso de códigos já escritos, validados e testados. Consequentemente, ele nos poupa muito tempo.

O que é .NET e como ele surgiu

Para entender o que é .NET hoje, vale voltar ao começo da história. Junto com o C#, por volta de 2001, a Microsoft lançou a primeira versão do seu framework para desenvolvimento de aplicações, chamado de .NET Framework.

Ao longo dos anos, ele recebeu as versões 1.0, 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.6, 4.7 e, até a escrita deste material, a 4.8. Além disso, essas versões podem ser instaladas lado a lado (side by side), ou seja, você pode ter várias delas na mesma máquina.

Por outro lado, o .NET Framework é compatível somente com o sistema operacional Windows. Com isso, ele vem perdendo espaço para o .NET Core, que também permite instalação lado a lado.

O movimento para a nuvem

Por volta de 2015, com o crescimento das aplicações em nuvem, a Microsoft se viu forçada a suportar outros sistemas operacionais. Em especial, o Linux, que era a base de boa parte dos servidores de aplicações web do mundo.

Porém, mudar um framework não é uma tarefa fácil, ainda mais um com bilhões de usuários. Então, a Microsoft tomou a iniciativa de construir um novo framework, com suporte a Windows, Mac e Linux.

Essa decisão resolvia o principal problema anterior, mas criava outro: o tempo de desenvolvimento. Afinal, o .NET Framework tinha anos de vida e centenas de milhares de linhas de código.

Desenvolver algo novo, do zero, com certeza não seria fácil. Como resultado, veio o "Core" do nome do novo framework, indicando que inicialmente ele trazia apenas o básico para as aplicações rodarem.

O que é .NET Core

Embora sua primeira versão tenha recebido apenas as bibliotecas básicas, o .NET Core evoluiu rápido. Na versão 3.1, a atual no momento da escrita, ele já está bem completo.

Além disso, ele passou a ser a recomendação da Microsoft para novas aplicações. Ou seja, se você está começando algo agora, não deve mais utilizar o .NET Framework.

O novo framework foi completamente reescrito e conta com inúmeras melhorias de segurança e desempenho. Com isso, passou a figurar no topo das listas de performance.

Também é multiplataforma e de código aberto, publicado no GitHub sob a licença MIT. Dessa forma, qualquer pessoa pode acompanhar e contribuir com sua evolução.

Embora muito tenha mudado na plataforma, o C# continua muito parecido. A linguagem recebeu incrementos, mas segue fiel à sua base original.

O que é .NET Standard

Desde 2015 até a escrita deste material, o .NET Framework e o .NET Core coexistem. Inclusive, os dois podem ser instalados na mesma máquina.

Também podemos ter bibliotecas que precisam funcionar tanto em um quanto em outro, o que pode causar certa confusão. Para garantir essa compatibilidade, existe uma padronização chamada .NET Standard.

Segundo a documentação oficial do .NET Standard, ele é uma especificação formal das APIs disponíveis em múltiplas implementações da plataforma. Em outras palavras, é o que chamamos de "surface API": não é algo palpável, apenas um conjunto de definições.

Então, não "programamos" em .NET Standard. Em vez disso, usamos essa especificação como referência para saber o que podemos utilizar em cada framework, a fim de manter compatibilidade entre eles.

Podemos dizer que o .NET Standard é a interseção entre os frameworks. Assim, ele garante que tudo que utilizarmos em um estará presente no outro.

Na prática, uma biblioteca que mira o netstandard2.0 funciona no .NET Core 2.0 ou superior e no .NET Framework 4.6.1 ou superior. Já o netstandard2.1 é suportado pelo .NET Core 3.0 em diante, mas não pelo .NET Framework.

O que muda com o .NET 5

Até a escrita deste material, a versão atual do .NET Core é a 3.1. Enquanto isso, o lançamento da versão 5 está programado para novembro de 2020.

O .NET 5 será a junção dos dois frameworks, porque o .NET Core avançou a ponto de conter quase tudo que o .NET Framework continha. Isso também explica o número da versão: como o .NET Framework parou no 4.x, a nova versão recebeu o número 5 para evitar confusão.

O nome "Core" também será removido, já que este será um framework completo, unindo os dois mundos que temos atualmente. Mesmo com novas bibliotecas e otimizações de desempenho, todo código que escrevemos hoje em C# com .NET Core será reaproveitado.

A imagem abaixo, publicada pela Microsoft no anúncio da nova versão, ilustra tudo que essa plataforma unificada vai englobar.

Diagrama do .NET 5 mostrando uma única plataforma .NET para desktop, web, nuvem, mobile, jogos, IoT e IA, com runtime, bibliotecas e ferramentas compartilhadas
Visão da plataforma unificada apresentada no anúncio oficial do .NET 5.

Para mais detalhes, vale ler o anúncio original da Microsoft, Introducing .NET 5. Também temos um artigo sobre os motivos para aprender .NET 5.

SDK e Runtime: o que instalar

Depois de entender o que é .NET, o próximo passo é a instalação. Para usar os recursos da plataforma, precisamos instalá-la, e essa instalação se divide em duas partes: SDK e Runtime.

Como vimos anteriormente, o Runtime executa e gerencia nossas aplicações. Por sua vez, o SDK nos auxilia no desenvolvimento delas.

SDK é a sigla para Software Development Kit, ou kit para desenvolvimento de software. Ele inclui a CLI, as bibliotecas, o próprio Runtime e o executável dotnet, que roda os comandos e as aplicações.

Em resumo, se você já tem uma aplicação criada (EXE ou DLL) e quer apenas executá-la, não precisa instalar o SDK. Nesse caso, basta o Runtime.

Um ótimo exemplo são as máquinas onde nossas aplicações vão rodar, como servidores ou o computador de um cliente. Elas não precisam do SDK, apenas do Runtime.

O pacote do SDK é maior, afinal contém tudo que precisamos para desenvolver. Já o Runtime contém apenas o mínimo necessário para executar as aplicações.

Versões do .NET lado a lado

Antes de prosseguir com a instalação, é importante entender que as versões podem coexistir lado a lado na sua máquina. Isso significa que você pode ter as versões 2.1 e 3.1 instaladas ao mesmo tempo.

Ou seja, você não precisa remover uma instalação para adicionar outra mais recente. Cada projeto usa a versão para a qual foi configurado.

O que é LTS

LTS é a sigla para Long Term Support, ou suporte de longo prazo. Isso significa que a Microsoft continuará trabalhando nessa versão por um bom tempo, com correções e atualizações de segurança.

No .NET Core, as versões marcadas como LTS foram a 1.0, a 1.1, a 2.1 e, atualmente, a 3.1. De acordo com a política de suporte, uma versão LTS recebe suporte por três anos após o lançamento.

O .NET Core 3.1, por exemplo, tem suporte até 13 de dezembro de 2022. Já o 3.0, que não é LTS, teve o suporte encerrado em 3 de março de 2020.

É muito importante optar sempre por uma versão LTS em projetos longos, tanto pelo suporte quanto pela maturidade. Começando agora, por exemplo, não faria sentido escolher o .NET Core 3.0, já que temos o 3.1 com suporte estendido.

As versões LTS e recomendadas aparecem marcadas na lista de downloads do site oficial, como no exemplo abaixo:

.NET Core 3.1  (recommended) LTS

A palavra recommended ao lado do nome indica a versão atual recomendada. Enquanto isso, a sigla LTS informa que essa versão terá uma longa vida de suporte.

Como instalar o .NET

Sempre busque a instalação no endereço oficial, dotnet.microsoft.com. Evite baixar o Runtime ou o SDK de qualquer outra fonte.

Caso queira ir direto para o download da versão desejada, basta acrescentar o caminho /download/dotnet-core/{versao} ao endereço. No nosso caso, utilizaremos a 3.1.

Assim, a URL fica dotnet.microsoft.com/download/dotnet-core/3.1. Ao acessar esse endereço, a página lista tanto o SDK quanto os Runtimes.

Entendendo o número da versão

Note que a versão do SDK exibida no momento da escrita é a 3.1.201. Nesse caso, o número final representa uma atualização do SDK, que traz recursos de ferramenta e pequenas correções sem alterar a versão principal da plataforma.

Essas atualizações não impactam o código que já produzimos. Por outro lado, quando uma versão nova quebra algo que já funcionava, chamamos isso de breaking change.

Existem outras informações nessa página que trataremos mais adiante. Por enquanto, o que importa é baixar o pacote desejado, que fica na coluna Installers, de acordo com o seu sistema operacional.

Sistemas operacionais recomendados

No Mac e no Windows, a instalação acontece por meio de um assistente passo a passo. No Linux, é necessário executar alguns comandos, mas de forma geral eles são bem simples.

Para prosseguir, você precisa instalar o SDK desejado, de acordo com o sistema operacional que estiver utilizando. Embora a plataforma suporte diversos sistemas e versões, segue uma tabela de recomendações:

SO Versão mínima Versão recomendada
Windows 10 10
macOS High Sierra Catalina
Linux (Ubuntu) 18.04 20.04

Tipos de Runtime

A instalação do Runtime se divide em três partes. O ASP.NET Core Runtime atende aplicações web, o Desktop Runtime atende aplicações desktop no Windows e o .NET Core Runtime atende as demais aplicações.

Essa divisão permite que os pacotes de execução sejam ainda menores, mais fáceis de distribuir e de instalar. Caso necessário, todos podem ficar lado a lado na mesma máquina, como vimos com o SDK.

O mesmo vale para diferentes versões do Runtime que suas aplicações exijam. Para o desenvolvimento, entretanto, tudo que precisamos já vem no SDK que instalamos, então não há necessidade de instalar um Runtime neste momento.

Próximos passos

Agora que você já sabe o que é .NET, o que é um framework e como as versões se organizam, está pronto para colocar a mão na massa. O próximo passo é seguir o guia de instalação, configuração e primeiros passos com .NET.

Depois disso, vale revisar os fundamentos da linguagem no artigo sobre C#. Assim, você junta a linguagem e a plataforma em um mesmo caminho de estudo.

Em resumo, guarde três ideias. O .NET Framework é o legado restrito ao Windows, o .NET Core é o presente multiplataforma e o .NET 5 é o futuro que une os dois.

FAQ

Qual é a diferença entre .NET Framework e .NET Core?

O .NET Framework roda apenas no Windows. Já o .NET Core é multiplataforma, de código aberto e é a recomendação da Microsoft para novos projetos.

Preciso instalar o SDK e o Runtime?

Para desenvolver, basta o SDK, porque ele já inclui o Runtime. Para apenas executar uma aplicação pronta, o Runtime é suficiente.

O que significa uma versão LTS?

É uma versão com suporte de longo prazo, que no .NET Core dura três anos a partir do lançamento.

Posso ter várias versões instaladas ao mesmo tempo?

Sim. Tanto o SDK quanto o Runtime permitem instalação lado a lado, e cada projeto usa a versão para a qual foi configurado.

Quando devo usar o .NET Standard?

Quando você cria uma biblioteca que precisa funcionar em mais de uma implementação, como .NET Framework e .NET Core ao mesmo tempo.