Categorías: Noticias

Cómo ejecutar programas implementados en .NET en Linux con Mono

Introducción

Cuando el otro día hablábamos de cómo ejecutar un programa Windows sobre Linux con Wine, nos preguntaron por los programas que están implementados con .NET, que por cierto cada día son más en plataformas Windows.

Desde estas líneas os recuerdo que al igual que Java, .NET es una plataforma pensada para tener un carácter multiplataforma (aunque en la realidad el grado de compatibilidad es mucho menor) por lo que con una máquina virtual que soporte la ejecución de dicho programa a priori no habría problema.

¿Existe un entorno de ejecución de .NET en Linux? Sí que existe, es Software Libre y es uno de los proyectos libres que más me interesan (por suerte o por desgracia trabajo a diario con entornos .NET en mi trabajo). Hablamos del Proyecto Mono y he de deciros que es uno de los proyectos más polémicos de todo el universo libre por razones de cercanía a Microsoft.

Ejecución

Un ejecutable creado con .NET para plataformas de escritorio podemos ejecutarlo directamente desde la consola con la siguiente orden:

$ mono fichero.exe

Tendremos que tener instalado el entorno de ejecución de Mono (normalmente llamado mono-runtime si queréis buscarlo en vuestro gestor de paquetes).

Es muy posible que el instalador del programa que queremos ejecutar no esté implementado en Mono, por lo que habría que seguir dos pasos:

  1. Ejecutar el instalador con Wine
  2. Buscar la ruta dónde se ha instalado y ejecutarlo con Mono. Os doy un consejo, mirar en vuestro directorio home la carpeta “.wine”, dentro de ella “drive_c” y ahí “Archivos de programa”, al más puro estilo Windows.

En ese directorio: $HOME/.wine/drive_c tendréis una emulación del disco principal del sistema imitado por Wine.

    F. Javier Carazo Gil

    Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

    Ver comentarios

    • Pues me sale este error, que estuve investigando y no conseguí entender.

      Cannot open assembly 'Setup.exe': File does not contain a valid CIL image.

      En fin, tampoco es el fin del mundo.

      buen post!, saludos.

    • @nordri: Como comento en el post, lo que te ocurre es que el instalador no está implementado en .NET (CIL es el nombre del pseudo-lenguaje que usa .NET/Mono, podríamos compararlo con el bytecode de Java).

      Debes ejecutar el instalador, tratar que te instale el programa (forzándolo a que no compruebe que está instalada la Framework de .NET) y luego ejecutarlo con .NET.

      Si quieres engañarlo puedes tratar de extraer del instalador con tar u otro compresor, el programa en sí y ejecutarlo posteriormente con Mono como comento en este artículo.

      Ya me contarás cómo te va.

    • Bien, efectivamente el instalador no era un programa .NET, y con el último Wine se ha ejecutado y ha instalado el software. De echo, esto me decía "file"
      nordri@nordri-desktop:~$ file sandbox/Setup.exe
      sandbox/Setup.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit

      Bueno, se ha instalado, eso ha mejorado con respecto a la última vez que lo probé con Wine, pero "mono" no lo lanza, te pego aquí lo que me dice:

      http://pastebin.com/PQEdW5Kc

      Un saludo

    • @nordri: Por lo que veo en el pastebin, te faltan los ensamblados de Visual Basic a los que hace referencia el programa de Hoffman.

      Lo más fácil es que pruebes a instalar un paquete que en los repositorios de Ubuntu 10.04 se llama: libmono-microsoft-visualbasic, si no lo encuentras busca: "Visual Basic 2005 runtime libraries for Mono".

      Con eso creo que lo tendrás solucionado, porque automáticamente el paquete te lo mete en el GAC que es por así decirlo el coordinador del repositorio de ensamblados del sistema Mono/.NET.

    • Instalé el soporte para VB como me has comentado y llego a este error
      nordri@nordri-desktop:~$ mono .wine/drive_c/Archivos\ de\ programa/Hofmann/Hofmann/program/Hofmann.exe
      ** Message: Unknown heap type: CLR

      Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for ---> System.InvalidProgramException: Invalid IL code in A.c371aab3e1f40fe2ebcd6dcee95f7d0e1:c5f10bc2014e3a32b10cc0f5e08c0bff9 (): IL_0002: stloc.0

      at ..cctor () [0x00000]
      --- End of inner exception stack trace ---

      Según he leido el soporte de VB es bastante reciente, así que espero que en próximas releases funcione.

      Muchas gracias
      Saludos

    • @nordri: Esperemos que versiones futuras arreglen el problema. Me alegro al menos de que hayas investigado algo por Mono para ver que muchas aplicaciones de .NET pueden ejecutarse sin problemas en Linux.

      ¡Un saludo!

    • Hola por favor ayudame manda tu respuest alo correo lo que pasa que mi aplicacion echa en vs2010 con c# no coje con el wine no se que hacer ya tengo instalado el mono y nada que lo abre el proyecto dice que falta asembladores

    • @Diego: tienes que buscar los ensamblados que te faltan. Para ello búscalos primero, luego los referencias con el GAC y finalmente los ejecutas con Mono.

    • Hola gracias, tu pagina me ayudo a arrancar un programa, pero hay algo que no comprendo. Tengo el codigo fuente  de un programa .NET, lo compilo con make, luego lo instalo con make install y va a /usr/local/share/programax. Si en terminal voy a ese directorio y ejecuto mono programax si funciona. Pero si en el sistema de ficheros en modo grafico, le digo ejecutar con mono runtime (desde terminal o no es indiferentel), entonces parece que intenta arrancar pero la ventana se cierra al poco tiempo. No consigo entender por que pasa, llevo poco tiempo con linux

    Entradas recientes

    DeepSeek

    2 días hace

    Contacto

    2 semanas hace

    Smart-tv mute

    2 semanas hace

    STEAM OS

    3 semanas hace

    2025

    4 semanas hace

    El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

    https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

    1 mes hace