ASP .NET 5 -  Escolhendo o ambiente .NET correto no servidor

 No artigo de hoje vou apresentar os conceitos básicos relacionados com o .NET Execution Environment (DNX) apresentando os prós e contras de cada um dos sabores do DNX disponíveis.

Nota :  Veja a atualização deste artigo em :  ASP .NET Core RC2 com Visual Studio Community 2015 - Usando o .NET CLI - I

A ASP .NET 5 (a nova versão da ASP .NET) é baseada no  .NET Execution Environment (DNX) o qual suporta a execução multiplataforma (cross-plataform) no Windows, Mac e Linux.

Você pode pensar em uma aplicação ASP.NET 5 como um aplicativo DNX, onde DNX está para o ambiente de execução .NET ou .NET Execution Environment.

Os projetos DNX são criados com um arquivo project.json.  Assim, o DNX é não apenas um ambiente de tempo de execução, mas também um SDK.

A figura abaixo mostra um esboço desse conceito:

Nota:  Este artigo é uma tradução do original com acréscimos de outras fontes (MSDN) : Choosing the Right .NET for you on Server

Então o que vem a ser exatamente o .NET Execution Environment (DNX) ?

O DNX é um kit de desenvolvimento (SDK) e um ambiente de execução (runtime environment) que possui tudo que você precisa para rodar aplicações .NET no Windows, Mac e Linux.

Ele fornece um processo de hospedagem, uma lógica de hospedagem CLR e um gerenciamento de reconhecimento de pontos de entrada e foi construído para executar aplicações ASP .NET em ambiente multiplataforma, podendo no entanto executar outros tipos de aplicativos .NET como o aplicações console multiplataforma.

O desenvolvimento .NET multiplataforma DNX fornece um ambiente de desenvolvimento e execução consistente em múltiplas plataformas (Windows, Mac e Linux) e em diferentes sabores : 

  1. .NET Framework
  2. .NET Core
  3. Mono

Nota: Você pode selecionar um ambiente DNX específico usando a janela de propriedades do projeto, clicando na tab Debug e rodar com ou sem o Depurador:

Qual desses dessas opções você deve usar no desenvolvimento de sua aplicação ?

Vamos ver os prós e contras de cada um deles.

1 - .NET Framework

O .NET Framework é o mais conhecido e o mais maduro das 3 opções sendo um framework completo que acompanha o Windows há mais de 10 anos sendo um framework que fornece o mais alto nível de compatibilidade com suas aplicações e bibliotecas existentes.

O .NET Framework é executado em somente no ambiente Windows. É também um componente monolítico com uma grande área de superfície de API e um ciclo de liberação de atualizações mais lenta. Seu código fonte esta disponível para consulta mas ele não é um projeto open source ativo.

2 - .NET Core

O .NET Core 5 é uma implementação de biblioteca e runtime modular que inclui um subconjunto do .NET Framework. Atualmente ele é um recurso completo no Windows, e em desenvolvimento para Linux e OSX.  Ele é constituído por um conjunto de bibliotecas chamadas de "CoreFX", e um pequeno e otimizado runtime chamado de "CoreCLR".  O .NET Core é de código aberto e, assim você pode acompanhar o progresso do projeto e contribuir com ele no GitHub.

As bibliotecas CoreCLR(Microsoft.CoreCLR) e CoreFX são distribuídos via NuGet visto que o .NET Core foi construído como um conjunto de bibliotecas modulares e você pode limitar a área de superfície da API que seu aplicativo usa para usar apenas as peças que você precisa. Você também pode executar aplicativos baseados em .NET Core em ambientes muito mais restritos (ex. Windows Server Nano).

A factoring da API .NET Core foi atualizada para permitir uma melhor componentização. Isto significa que as bibliotecas existentes construídos para o .NET Framework geralmente precisam ser recompilados para rodar com .NET Core. O ecossistema .NET Core é relativamente novo, mas está crescendo rapidamente, com o apoio de pacotes .NET populares como JSON.NET, Autofac, xUnit.net e muitos outros.

Desenvolver no ambiente .NET Core permite que você direcione uma única plataforma consistente que pode ser executada em várias plataformas. No entanto, o suporte do .NET Core para Mac e Linux ainda é muito novo e não está pronto para cargas de trabalho em produção.

3 - Mono

O Mono é um porte do .NET Framework construído principalmente para plataformas não Windows. Ele é open source e multiplataforma. Ele também compartilha uma API factoring semelhante ao .NET Framework, por isso muitas das bibliotecas gerenciadas existentes funcionam atualmente com o Mono.

O Mono não é uma plataforma suportada pela Microsoft. No entanto, é um bom campo de provas para o desenvolvimento multiplataforma, enquanto o suporte multiplataforma no .NET Core amadurece.

Veja o link do projeto Mono aqui : Mono: Home

Conclusão

O .NET Execution Environment (DNX) e o .NET Core tornam o desenvolvimento .NET disponíveis para muitos cenários que antes não eram possíveis. O DNX também lhe dá a opção de direcionar a sua aplicação para as plataformas .NET atualmente existentes.

Qual opção você deve escolher vai depender de muito de sua situação específica, seus prazos, os requisitos de recursos e requisitos de compatibilidade de sua aplicação.

Então eu creio que podemos partir para as seguintes sugestões :

1- Para projeto com código reutilizável e que precisa rodar em outra plataforma além do Windows, pelo menos nesse momento, você pode escolher ambos : o .NET Framework e o .NET Core. Isso é definido no arquivo project.json :

....
 "frameworks": {
    "dnx46": { },
    "dnxcore50": { }
  },
....

2- Para projetos existentes que exigem a compatibilidade de código você pode usar o .NET Framework, que é o framework completo e inclui WCF, tipos de XML, serializadores, suporte a GDI e APis Reflection. Nesta opção sua aplicação irá rodar somente em ambiente Windows:

....
 "frameworks": {
    "dnx46": { }
  },
....

3-  Com o .NET Core você pode desenvolver e implantar nos ambientes Windows, Linux e OS/X.  Outra vantagem é que mesmo que sua aplicação somente for executada no ambiente Windows,  você pode enviar somente partes do framework com a aplicação, ou seja, você não precisa instalar o framework completo em qualquer servidor em que você deseja implantar.

Na verdade, você pode até ter múltiplas aplicações no mesmo servidor usando diferentes versões do .NET Core CLR (versionamento side-by-side), e, atualizar um aplicativo sem se preocupar em quebrar os outros.

Uma desvantagem de usar o .NET Core é que o seu código existente pode exigir recursos que ainda não existem no .NET Core. (Portanto verifique se a compatibilidade é um requisito)

....
 "frameworks": {
    "dnxcore50": { }
  },
....

Nota : Considere que neste momento, o desenvolvimento para o ambiente de produção, usando o .NET Core, não seria muito recomendado, visto que ele ainda esta em desenvolvimento.

Com isso posto, você decide.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

     Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti