.NET Standard – Você precisa conhecer!

.NET Standard é a nova palavra do momento, quem acompanha de perto as novidades do mundo .NET com certeza já deparou com este novo conceito e é realmente muito importante que você compreenda bem o que ele significa.

O .NET Standard é um conceito essencial para compreender a unificação das plataformas .NET sendo que atualmente podemos entender como 3 plataformas:

.NET Standard

Por que precisamos de um padrão?

O .NET Framework foi lançado em meados de 2002 no formato de um framework único para desenvolvimento na plataforma Windows. Com o passar do tempo ganhou suporte para Web, Silverlight, WCF, WPF, etc…

Após o lançamento do .NET surgiram outros frameworks como Mono, Unity, etc. Que são implementações open-source do .NET Framework e aceitam a linguagem C#, pois implementam os padrões ECMA do C# e o CLR do .NET.

E para finalizar ainda temos o .NET Core o mais recente “sabor” de .NET Framework 100% open-source e multi-plataforma.

Problemas a vista

  • Sendo que todos estes “sabores” de frameworks suportam a linguagem C#, seria possível escrever um único código e rodar em qualquer plataforma?
  • Posso escrever uma biblioteca em .NET 4.6.1 e utilizá-la como referência no .NET Core?
  • É possível garantir que o código não irá quebrar ao trocar a versão do framework?

Não! Sempre existiram diversas limitações. Tanto no suporte das funcionalidades de cada versão quanto no número de APIs suportadas em cada framework.

Para que o .NET continue evoluindo rapidamente é necessário evitar a fragmentação entre tantas versões de frameworks e proporcionar a escrita de um código único para qualquer plataforma. A solução é implementar um padrão para que todas as versões dos frameworks suportem o mesmo conjunto de APIs.

Conceituando o .NET Standard

O .NET Standard não é mais um “sabor” de .NET, você não instala o .NET Standard na sua máquina e também não devemos considerar o .NET Standard uma nova tecnologia.

O .NET Standard é uma interface, uma espécie de contrato que define a lista de APIs que aquela determinada versão do .NET deve suportar. Para entender de forma muito simples o conceito do .NET Standard imagine o seguinte cenário:

.NET Standard Analogia

O David Fowler também criou uma analogia bem interessante sobre o assunto.

Entenda que o .NET Standard é uma espécie de interface que define as APIs que cada versão do .NET irá oferecer suporte. O código do .NET Standard não possui implementação de comportamento, apenas a declaração das classes e métodos. Através deste padrão único conseguiremos uma total compatibilidade de um código .NET Framework para .NET Core por exemplo.

Mas o PCL não serve para isto?

O PCL (Portable Class Libraries) resolvia isto mas de uma outra forma, uma forma bem menos eficiente e que limitava a entrada de novas plataformas. O .NET Standard substituiu o PCL.

Como o .NET Standard resolve esta questão?

O código será compilado para uma versão específica do framework .NET que é suportado em versões específicas do .NET Standard. Cada versão do .NET Standard suporta um número determinado de APIs.

.NET Standard Versões

O .NET Standard 2.0 suporta o .NET Core 2.0 e .NET Framework 4.6.1.
No futuro suportará também as novas versões do Mono, UWP e Xamarin.

Um ponto muito interessante é a evolução da versão 1.6 para a versão 2.0:

Versão #APIs Crescimento%
1.0 7,949
1.1 10,239 +29%
1.2 10,285 +0%
1.3 13,122 +28%
1.4 13,140 +0%
1.5 13,355 +2%
1.6 13,501 +1%
2.0 32,638 +142%

A versão 2.0 do .NET Standard suporta 142% mais APIs que a versão anterior. Um salto incrível no número de APIs suportadas.

Muita calma nessa hora!

Isto não significa que um código escrito para .NET Framework 4.6.1 seja 100% compatível com o .NET Core 2.0.
Existem muitas APIs no .NET Framework que não são implementadas pelo .NET Standard 2.0, logo também não serão suportadas no .NET Core 2.0.

A única compatibilidade entre versões .NET são aquelas cobertas pelo .NET Standard.

Como descobrir se o código está 100% coberto pelo .NET Standard?

Utilize o API Port para analisar se o código está 100% coberto por uma versão específica do .NET Standard. É possível rodar o analyzer via linha de comando ou via Visual Studio.

apiport analyze -f C:\src\mylibs\ -t “.NET Standard,Version=2.0”

Com .NET Standard é muito mais fácil!

O .NET Standard foi criado para que o compartilhamento e a reutilização de código entre várias plataformas .NET se tornem muito mais fáceis.

Desenvolver um Nuget Package será muito mais fácil, basta apontar o target da class library para uma versão específica do .NET Standard ao invés de distribuir uma versão específica para cada framework.

Saiba mais

Documentação oficial
https://docs.microsoft.com/pt-br/dotnet/standard/net-standard

Explore quais APIs são suportadas em cada versão do .NET Standard
https://docs.microsoft.com/en-us/dotnet/api/?view=netstandard-2.0

Confira a FAQ do .NET Standard
https://github.com/dotnet/standard/blob/master/docs/faq.md

Acompanhe a atualização de versões do .NET Standard
https://github.com/dotnet/standard/blob/master/docs/versions.md


Caso esteja interessado em conhecer mais sobre ASP.NET, DDD, Padrões de Arquitetura e boas práticas de desenvolvimento não deixe de conferir as ementas dos meus cursos:

Vamos continuar a troca de experiências, deixe seu comentário abaixo. Se gostou e concorda com o artigo, compartilhe com seus colegas para transmitirmos o conhecimento para o máximo de pessoas possíveis.

17 pensou em “.NET Standard – Você precisa conhecer!

  1. Ótimo artículo, de forma rápida e simples da a entender o que é o .Net Standard

  2. O Conceito de .NET Standard me faz pensar na tentativa da Microsoft em tornar o W10 um sistema que atuasse tanto em desktop quanto mobile.

    O .NET Standard parece uma peça desse quebra cabeças na evolução das tecnologias Microsoft, uma vez que quanto mais padronizado esteja maior integração haverá entre todos os produtos por ela desenvolvidos.

    A cada dia tenho percebido que vale a pena me especializar em Desenvolvimento,
    Obrigado por compartilhar este artigo Eduardo Parabéns !

      • Quem pegar esse bonde agora não vai se arrepender, pois além de ser o melhor momento dos produtos da microsoft praticamente um open-source, terá daqui a poucos anos a maior comunidade de uma linguagem de programação do planeta nunca visto antes.
        Parabéns para a Microsoft que que com está visão de abertura do Software fará coisas extraordinárias e inacreditáveis para o progresso das ciências no mundo.

  3. Bom dia,

    Eu soh Naum entendi a primeira imagem, o xamarin Naum deveria estar dentro do .netcore? Ou ele reemplementa o netstandart?

    • Xamarin pode usar Mono e as implementações especiais para IOS e Android que não são .NET mas irão implementar também o .NET Standard para padronizar a reutilização de código.

  4. Não é a primeira vez que me deparo com .Net Standard e confesso que nas anteriores a ignorância foi maior que a curiosidade e pensei “mais um nome pra decorar, que saco!” parei só sabendo que existe.
    Como sei que ^(99|100)%$ dos seus posts são fantásticos, dei uma atenção maior e não me arrependi.
    Agora sei que existe, qual o propósito e de como me beneficiar no dia a dia calculando os riscos.

    Obrigado!

    • Existe apenas uma API não coberta mas que pode ser facilmente trocada com algumas linhas de código. Já tem versão não oficial rodando no .NET Core, acredito que em breve deve sair o NH

  5. Artigo muito bem elaborado, não fica dando voltas e vai direto ao ponto que realmente faz a diferença.

  6. Muito bom, parabéns!

    Estou em contato com o .NET Standard desde 2015 e realmente é algo incrível, estou aguardando com ansiedade a versão final do 2.0.

    Quando possível, fale também do XAML Standard.

    Um grande abraço e sucesso!

  7. Ola!
    Eu baixei o projeto Equinox do seu github e na hora de dar o comando “dotnet ef database update” no command line, aparece o seguinte erro:
    Could not load file or assembly ‘netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51’. O sistema não pode encontrar o arquivo especificado.
    Eu dei o comando Install-Package NETStandard.Library -Version 2.0.1 no gerenciador de console, mas não adiantou nada.
    Como eu resolvo isso por favor?

Os comentários estão fechados.