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!

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 CoreCLR rodando no Mac OS X, sem enganações, na sua máquina. Que bela época para ser programador .NET.
Comments
1 Comment
Nice.
Leave a Comment