sábado, octubre 30, 2010

Correr un programa .NET Framework bajo Linux

Por cuestiones del destino terminé sabiendo programar usando el .NET Framework de Microsoft y Visual C# Express Edition. Me ha gustado mucho usarlo ya que las librerías que contiene y el soporte que hay en línea (foros, Google, MSDN, etc.) es muy vasto. Mientras leía el libro Pro C# 2010 and the .NET 4 Platform, me enteré de que se puede correr una aplicación del .NET Framework bajo Linux usando el ambiente Mono.

Pro C# 2010 and the .NET 4 Platform, Fifth Edition


Una vez que se ha compilado la aplicación bajo un sistema operativo Windows, se obtiene un archivo .exe o un .dll, el cual corre correctamente bajo el mismo SO si el .NET Framework está instalado. Si se intenta correr ese programa bajo Linux se obtiene un mensaje de error:


[/home/link/Desktop/SL File2Array.exe]
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
zipinfo: cannot find zipfile directory in one of /home/link/Desktop/SL File2Array.exe or
/home/link/Desktop/SL File2Array.exe.zip, and cannot find /home/link/Desktop/SL File2Array.exe.ZIP, period.

Para que corra hay que instalar Mono, o instalar una distribución de Linux que traiga integrado Mono. Esta distribución se puede descargar gratuitamente desde la página oficial de Mono. En mi caso descargué el Live CD que pesa como 660MB.

http://www.go-mono.com/mono-downloads/download.html

Nota: los usuarios de Ubuntu pueden instalar Mono desde una terminal tecleando lo siguiente...
sudo apt-get install mono-complete

Una vez que has arrancado tu PC con el Live CD, basta que instales el SO a tu disco duro. Da doble click en el icono Live Installer, el password a usar es mono. Sigue los pasos en pantalla y al reiniciar tu PC tendrás Linux instalado.



NOTA: Si no sabes cómo instalar un SO podrías perder todos los datos de tu disco duro. Claro, si eres un programador .NET, seguro que esta advertencia está de sobra.

Una vez que hayas reiniciado tu PC bastará con que copies cualquier .exe o .dll que hayas compilado con el .NET Framework. Dale click derecho y elige la opción Abrir con Mono (o abrir con otra aplicación...). No hace falta recompilar tu código fuente, el compilador Just-In-Time de Mono se encarga de ello.


Si tu aplicación cumple con los requerimientos mínimos de Mono, funcionará automáticamente.

Compilé SL Q15 Tool con Visual C# 2010 Express Edition, usa el .NET Framework 4.0. Corre nativamente bajo Windows XP, Vista y 7. El mismo archivo .exe que corre en Windows, corre bajo linux con un bug, si coloco un número con 4 letras hexa, no se hace bien la conversión. Esto no sucede bajo Windows.



Compilé SL File2Array usando VC# 2008, con el .NET Framework 3.5 SP1. Corre en Windows y en Linux sin mayor problema.

Otro ejemplo, un cálculo que hice con integración por trapecios y su grafica. Fotos de la versión corriendo en Linux y en Win7.


  

Así que si eres un experto con el .NET Framework y de repente te dicen que tu software debe correr en Linux... no pienses en Java, mejor haz la prueba con Mono y te evitas hacer la migración. Espero que este mini tutorial te haya servido para probar tus ensamblados .NET bajo Linux.

10 comentarios:

Anónimo dijo...

Ud Mig es un grande de verdad, sepalo !!!

MigSantiago dijo...

Jaja gracias, pero no es nada que no se pueda resolver con Google.

Gracias por visitar el sitio.

Kraven234 dijo...

"Jaja gracias, pero no es nada que no se pueda resolver con Google"

Yo llegue aca por google :) gracias por la info

MigSantiago dijo...

Gracias por los comentarios. He estado trabajando en un programa en C># para windows y para linux. He tenido problemas con algunas imágenes que aparecen en otra Location en Linux, pero nada que no se arregle detectando en que OS está corriendo la aplicación:

/* If the program is running on Linux */
OperatingSystem os = Environment.OSVersion;
PlatformID pid = os.Platform;
Console.WriteLine("Running on [" + pid.ToString() + "] OS");
if (PlatformID.Unix == pid)
{
Console.WriteLine("Running on Linux!!!");
}
}

Anónimo dijo...

saludos y que hay de las paginas aspx tambien hay podemos ejecutar nuestros sitios bajo linux, como hacer esto...

MigSantiago dijo...

Esa es una buena pregunta. En el sitio de Mono te dicen cómo portar una aplicación web ASP a Mono...

Porting ASP.Net Applications
Guide to porting an ASP.Net application to run on Mono.

http://mono-project.com/Guide:_Porting_ASP.NET_Applications

MigSantiago dijo...

Comentario extra:

Correr C# en Linux sobre la Raspberry Pi

http://www.migsantiago.com/index.php?option=com_content&view=article&id=25:correr-aplicaciones-c-en-la-raspberry-pi&catid=1:tutorial&Itemid=23

Anónimo dijo...

oye que distro (parece opensuse) ocupas megusto mucho el wallaper de noche me lo podrias pasar

MigSantiago dijo...

Ahhh, pues en aquella ocasión sólo descargué el Live CD que ofrecen en la página de Mono. Ya no me acuerdo de cuál era. Disculpa.

Ya ahorita uso Ubuntu y pues instalo Mono manualmente.

Saludos, gracias por tu visita :D

Anónimo dijo...

Muy buena nota MigSantiago, Gracias.
Saludos Manutek