Press enter to see results or esc to cancel.

ASP.NET 5 CoreCLR com Mac OS X

Uma das várias mudanças que estão acontecendo no mundo do .NET 2015 e do ASP.NET 5 é que agora aplicações .NET poderão rodar também no Mac e Linux, com suporte oficial da própria Microsoft. Yaaaay.

Durante a enxurrada de eventos dos últimos dias (Build 2015, dotnetConf 2015, Ignite) várias palestras se dedicaram a mostrar o ASP.NET 5 e o Code rodando em cenários diferentes do habitual, mas eu me senti ligeiramente traído quando percebi que quase todas as demos rodavam em cima do Mono. Nada contra o Mono, pelo contrário, o Mono é fantástico e foi criado por um dos nomes de maior respeito na comunidade .NET, mas é que o Mono sempre permitiu que aplicações .NET rodassem em sistemas *nix. O que eu queria mesmo era ver o ASP.NET rodando no novo, promissor e open source CoreCLR, isso sim seria uma bela novidade. E já que as demos não fizeram isso, eu e outros membros impacientes da comunidade resolvemos fazê-lo nós mesmos.

A missão

Os builds do ASP.NET apresentados nas palestras eram o beta4, que ainda não tem suporte a nix, então tivemos que recorrer aos *nightly builds do beta5, e com isso leia-se: estamos prestes a mexer em código instável, tão instável que no momento em que você estiver lendo isso o código pode não funcionar mais. Mas tenha fé e venha comigo!

bugs-flood
Primeiros reports de bugs do CoreCLR nos *nix

Fazer o CoreCLR rodar pela primeira vez no Mac OS foi uma situação de gato e rato. Nós tentávamos até encontrar um erro bloqueante. Daí nós achávamos onde estava o problema e reportávamos nos vários projetos do GitHub, nós arrumávamos (nós = a equipe do ASP.NET, a comunidade e você!), e esso ciclo recomeçava. Para o beta5 foram necessários 5 dias de gato-e-rato para que o HelloMvc começasse a funcionar (apesar de ainda dependermos do mono para uma etapa), mas a boa notícia é que isso já funciona e você vai poder fazer algo quase inédito pra impressionar todos os seus amiguinhos.

Instalando o DNVM

O primeiro passo para todos que querem brincar com o novo ASP.NET sem a ajuda do Visual Studio 2015 é instalar o DNVM. Na verdade o DNVM (.NET Version Manager) é apenas um script para uma série de utilitários para utilizar o runtime do .NET.

A maneira mais fácil de instalar o dnvm no Mac OS X hoje é utilizando o Homebrew, então comece instalando-o. Caso não possua ou não queira utilizar o Homebrew você pode construir a partir do /c, que, eu confesso, é bem hax0r.

Depois de instalar o Homebrew execute os seguintes comandos para instalar o dnvm:

brew tap aspnet/dnx
brew update
brew install dnvm

Feito isso, registre o comando dnvm:

source dnvm.sh

Instalando o .NET Core DNX

Agora você vai precisar instalar o Mono DNX. Calma, nós não rodaremos a aplicação em cima do Mono runtime, mas nós precisamos dele pra fazer a coisa toda funcionar, a culpa é do dnu—usaremos ele já já— ele ainda não está pronto para rodar com o CoreCLR, então precisaremos que o Mono quebre o nosso galho.

Como o runtime .NET padrão para o Mac OS X no momento é o mono, utilize o seguinte comando para instalar a última versão (-u significa unstable, instável):

dnvm upgrade -u

Agora, para que seus amigos não te chamem de traidor, instale o CoreCLR, também instável:

dnvm install latest -r coreclr -u

Para conferir que tudo está certo você pode executar o comando

dnvm list

Você deverá receber uma saída semelhante à essa:

Active Version              Runtime Arch Location             Alias
------ -------              ------- ---- --------             -----
       1.0.0-beta5-11760    coreclr x64  ~/.dnx/runtimes      
       1.0.0-beta4          mono         ~/.dnx/runtimes      
  *    1.0.0-beta5-11760    mono         ~/.dnx/runtimes      default

Não se preocupe se as versões ou “arch” estiverem diferentes, o que importa é que você tenha uma versão beta5-* tanto de Mono quanto de CoreCLR.

A Microsoft não armazena todos os nightly builds gerados, então dependendo do momento em que você está seguindo esse post você terá uma versão diferente. Além disso, esses builds são o *bleeding edge* das novidades do ASP.NET, então o código pode estar quebrado no dia em que você testar

Rodando sua aplicação ASP.NET 5 no CoreCLR

Você está pronto para rodar sua aplicação agora, eu estou utilizando o Visual Studio Code e resolvi utilizar a aplicação HelloMVC que está disponível no repositório de exemplos da Microsoft.

Independente da aplicação escolhida para rodar, você precisa restaurar os pacotes da sua aplicação. Quem restaura os pacotes é o DNU, e como dito anteriormente, ele só rodará no Mac OS X se for utilizado o runtime do Mono, então vamos trocar momentaneamente o runtime e restaurar o pacote:

dnvm use 1.0.0-beta5-11760 -r mono
dnu restore

Lembre-se de trocar a versão do comando acima para a mesma versão instalada por você.

Para fazer o restore através do VS Code, utilize o atalho Command + Shift + P e digite dnu restore. O restore pode levar um tempo dependendo da sua conexão.

O VS Code já utiliza o Mono por padrão quando você dispara o comando através dele.

Se tudo ocorrer sem erros, você já pode rodar sua aplicação agora. Para isso é necessário primeiro trocar o runtime para o CoreCLR:

dnvm use 1.0.0-beta5-11760 -r coreclr

Agora, sem fechar esse terminal, chame o .NET eXecution Environment passando algum dos comandos disponíveis no seu project.json. No momento o Kestrel é o único servidor web que permite rodar aplicações ASP.NET no Mac OS X, portanto utilizaremos esse comando:

dnx . kestrel

O . indica o caminho da sua aplicação, nesse caso . significa a pasta atual, então adapte o comando de acordo com seu uso.

Não se esqueça que o VS Code utilizará o Mono sempre que o dnx for disparado pela paleta de comandos dele, por isso é necessário manter o terminal aberto após mudar a versão com o dnvm list.

Se tudo der certo e ninguém tiver quebrado o beta5, você poderá acessar o endereço especificado no seu project.json.

asp.net 5 core clr on mac os

ASP.NET CoreCLR rodando no Mac OS X, sem enganações, na sua máquina. Que bela época para ser programador .NET.

Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInEmail this to someone
Comments

1 Comment

Cristian

Nice.


Leave a Comment