Con .net core Microsoft presumió su introducción formal al opensource. Ahora también puedes ejecutar aplicaciones de .net core en tu raspberry pi usando Raspbian linux.

Ejecutar aplicaciones de .net core en Raspbian (raspberry pi)

Introducción

Desde que Microsoft anunció .net core, me sentí totalmente emocionado al pensar en las posibilidades de una implementación oficial de .net opensource. Sin embargo no había comprendido algunas de las implicaciones que .net core significa, tales como el sacrificio de muchas islas en la biblioteca de .net en pro de la compatibilidad. (Aunque, sinceramente, la promesa de simplicidad y compatibilidad se perdió pronto con los múltiples perfiles de las PCLs, pero eso es material para otra serie de posts). Implicaciones que tienes una repercusión en el tiempo que puedes pasar leyendo e investigando cómo y de qué se trata .net core.

A pesar de llevar ya aproximadamente un año liberado, aún no se ha implementado soporte para compilarse para una arquitectura ARM. ¿Sabes ya a dónde quiero llegar?

.net core

dotnet core es únicamente una implementación de .net. Ya sabes que hay bastantes implementaciones de .net. Ejemplos: .net 2.0, .net 3.5, .net 4.5, .net 4.6, mono, etc. De estas, ¿Sabes cuál corre perfectamente en Raspbian? :)

Mono en Raspberry Raspbian

Ahora, hay cierto problema con mono en Raspbian y es que la versión que se encuentra en los repositorios default no es la más actual y no contiene las características necesarias para ejecutar assemblies de .net core. El paso más importante de este recorrido será instalar una versión más actualizada de mono en Raspbian. No te preocupes, ya tengo todo listo para ti:

  1. Agrega las claves de autenticación de los repositorios apt que vamos a agregar

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
    
  2. Agregamos los repositorios apt correspondientes:

    echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
    
    
    echo "deb http://download.mono-project.com/repo/debian wheezy-apache24-compat main" | sudo tee -a /etc/apt/sources.list.d/mono-xamarin.list
    
  3. Actualiza el cache de apt

    sudo apt-get update
    
  4. Actualiza todos los paquetes instalados

    sudo apt-get upgrade
    
  5. Instala mono y bibliotecas PCL

    sudo apt-get install mono-complete
    
    
    sudo apt-get install referenceassemblies-pcl
    

Listo! Sólo nos queda probar la instalación ejecutando un assembly de .net core!

Creando una aplicación de consola de dotnet core

Gracias a las facilidades que Microsoft se ha tomado la molestia de implementar, podemos generar una aplicación simple de consola de dotnet core en menos de 5 minutos ;)

Creating a dotnet core app in OSX - 1 Creating a dotnet core app in OSX - 2

Ahora miremos qué binarios generó este experimento:

Checking build results

Al principio me sacó un poco de onda no ver un archivo *.exe en el directorio de salida del proyecto, pero pronto recordé que cuando el compilador de .net nombra a un archivo de salida *.dll o *.exe es un hecho meramente estético: los ensamblados de .net no son realmente archivos *.exe o *.dll en el sentido tradicional, sino que son archivos de CIL ambos y ambos siguen el mismo formato. Vamos a aprovecharnos de este hecho para hacer una prueba y discutirla más adelante:

Running output dll using mono

Aquí usé mono (la primera implementación opensource de .net) para ejecutar el ensamblado principal de la salida de nuestro proyecto prueba. A la máquina virtual de mono (y de cualquier otra implementación de .net) no le importa la extensión del archivo: únicamente se preocupa de que sea un archivo CIL correcto. En el caso del compilador de dotnet core, el archivo tiene puntos de entrada para ejecutarse, al igual que un *.exe, pero tiene una extensión "dll". Me parece intrigante por qué se decidido usar esa nomenclatura...

Bueno, Hagamos la prueba en nuestra Raspberry! Subí temporalmente a un servidor que rento con los chicos de winhost (el único proveedor de servicios de hosting que ocupo, principalmente por motivos de nostalgia) para descargarlo desde nuestro ambiente Raspbian e intentar de nuevo el último comando ejecutado:

Running dotnet core console app in raspbian using mono

¡Eso es todo por este post!

Posted by: fabzter
Last revised: 20 Oct, 2016 02:09 AM History

Comments

José Manuel Nieto (SuperJMN)
José Manuel Nieto (SuperJMN)
13 May, 2017 10:56 AM

Hola! Hay en la actualidad una mejor manera de hacer esto? he intentando instalar dotnetcore en Raspbian sin suerte. Gracias de antemano!

José Manuel Nieto (SuperJMN)
José Manuel Nieto (SuperJMN)
13 May, 2017 10:56 AM

Hola! Hay en la actualidad una mejor manera de hacer esto? he intentando instalar dotnetcore en Raspbian sin suerte. Gracias de antemano!

Your Comments

Used for your gravatar. Not required. Will not be public.
Posting code? Indent it by four spaces to make it look nice. Learn more about Markdown.

Preview