.NET Standard

Rafael Lillo Andrade
3 min readSep 16, 2018

--

Com a abertura do código do .NET a Microsoft precisava criar um jeito de compartilhar código entras as plataforma .NET (Mono, Common Language Runtime (CLR) e etc.) e evitar possíveis fragmentações entre as plataformas, e assim nasceu o .NET Standard, resolvendo problemas de compartilhamento de código entre plataformas e ambientes (Desktop, Mobile, Cloud, Game e etc), trazendo um conjuntos de API’s que roda em todas as plataformas.

Abaixo está uma imagem de como era fazer uma Class Library para o .NET Framework, .NET Core e Xamarin, se o .NET Standard não tivesse sido criado.

Como podemos ver não seria possível compartilhar esse código, e teríamos um problema maior, pois precisaríamos triplicar esse código. Agora com .NET Standard, temos como unificar todo o código, como a imagem abaixo mostra.

Caso uma API não seja suportada pelo Plataforma .NET que esteja rodando o código, será lançada uma exceção de PlatformNotSupportedException, com por exemplo o AppDomain possui um método chamada CreateDomain é suportada no .NET Standard, mas não é suportada pelo .NET Core.

Algumas API terão suporte limitado no .NET Standard, como é o caso do MarshallByRefObject, pois ele tem grande potencial de ter possuir breaking changes e outro exemplo é o System.Data, onde ele conterá a abstração dos provides(DbProvider, DbProviderFactoris, DbConnection, IDbConnection e etc), mas não conterá nem Provider especifico, por exemplo, ter um provider de SQL Server para o iOS, nesse caso faria mais sentido se o provider fosse de SQL Lite).

.NET Standard vs .NET Core

O .NET Standard é apenas uma especificação de API’s, não possuindo implementação, se olharmos o código fonte do .NET Standard, vermos que todos métodos, construtores e propriedades retornam throw null, já o .NET Core é uma plataforma do .NET e implementa o .NET Standard, essa mesma lógica é aplicada ao .NET Framework e ao Mono.

.NET Standard vs PCL

Antes do .NET Standard existia o Portable Class Libraries(PCL), com ele ainda é necessário selecionar a plataforma que deseja rodar, e por causa disso ainda continuamos com ter que pensar nas diferentes plataformas do .NET, e como o .NET Standard temos um único código suportado por todas as plataformas e também o .NET Standard é bem previsível, quanto maior a versão mais API estarão disponível e no caso da PCL isso não é necessariamente verdade, depende do conjunto de plataformas selecionadas, e por causa disso não é fácil prever a quantidade de API que estarão disponíveis para utilizar.

.NET Standard 2.0

Na versão 2.0 do .NET Standard houve um grande numero de API adicionadas, na imagem abaixo podemos ver a quais API o .NET Standard 2.0 tem suporte, e também fui decidido que essa versão não teria break changes em relação a versão 1.X.

Conclusão

O .NET Standard veio para resolver o problema de códigos cross-plataforms, atualmente possui um bom numero de API e devemos ter cuidado quando criamos uma lib no .NET Standard, pois dependendo da API e da plataforma, talvez uma exceção de PlatformNotSupportedException seja lançada.

Referências

--

--