¿Cómo convertir un simple .Net console project a en un exe portátil con Mono y mkbundle?

Me gustaría convertir mi sencilla y pura utilidad de consola .Net 2.0 en un exe portátil que podría poner en una memoria USB y ejecutar sin tener que preocuparme si las bibliotecas CLR y Framework están instaladas en una máquina en particular o no.

Stackoverflow ya tiene algo de información sobre el uso de Mono y Mkbundle para crear archivos de Windows autónomos de .Net-projects, pero lo que me gustaría es un HOWTO compacto pero útil.

¿Cuáles son los pasos mínimos para lograr una portabilidad de un proyecto simple de C # Visual Studio?

Aquí encontré un modo simple de cómo hacerlo, sin embargo, como no lo he probado, no puedo garantizar resultados. Como de costumbre YMMV.

Cita del artículo original (por favor, siga también el hilo del artículo original):

Mkbundle: paquete Mono con tus aplicaciones

¿Alguna vez se preguntó por qué necesita .NET Framework o Mono instalado para ejecutar su progtwig? Bueno, sería mucho más útil si pudieras distribuir tus aplicaciones sin molestar a tus clientes para que instalen frameworks adicionales, ¿no es así? Aqui estamos. Permite agrupar una aplicación basada en .NET con Mono, por lo que no necesita Mono o .NET instalado para ejecutarlo.

Prepare un ambiente

Primero necesita instalar el más nuevo Mono y Cygwin. Instalar Mono es muy sencillo, así que no puedes arruinar nada. Cuando comiences a instalar Cygwin, ve a la Vista completa, luego incluye 4 paquetes adicionales. Estos son: gcc, mingw, mingw-zlib y zlib.

Ahora necesita un símbolo del sistema. Tanto Mono como Cygwin crean accesos directos para las solicitudes de comando en su escritorio, pero necesita combinarlos en uno solo. Aquí hay un lote que lo hace por mí. Puede necesitar cambiarlo, si tiene otra versión Mono, por ejemplo.

Código:

echo Mono version 2.4 Build 6 echo Prepending 'C:\PROGRA~1\Mono-2.4\bin' to PATH PATH=C:\PROGRA~1\Mono-2.4\bin;%PATH% chdir C:\cygwin\bin bash --login -i 

Empaquete una aplicación con Mono

Así que ahora estamos en un símbolo del sistema, ejecutando este modo Cygwin. Tenga en cuenta que esto ya no es un aviso de DOS, y “dir” ya no funcionará. Para listar archivos use el comando de Linux “ls”. La carpeta que está explorando ahora es como la siguiente. Arek es un nombre de usuario. Código:

 C:\cygwin\home\Arek 

Busque esta carpeta con su explorador. Ahora copia 2 archivos en esta carpeta. El primero es su aplicación exe y el segundo es el archivo Mono.dll (2MB) que puede encontrar en su carpeta Mono. Código:

 C:\Program Files\Mono-2.4\bin 

Por alguna razón, el procedimiento completo no funciona con nombres de archivos largos, así que cambie el nombre de su aplicación exe. Debería cumplir con este antiguo nombre de DOS 8.3.

Volvamos al símbolo del sistema. Solo necesita 1 comando para agrupar su aplicación, y aquí hay alguna explicación.

mkbundle es un progtwig dentro del paquete Mono | -o Bundled1.exe especifica cómo se nombrará el exe Mono-bundled | Winform1.exe dice lo que se incluirá, las bibliotecas Mono se incluirán de todos modos | –deps es necesario aunque no estoy seguro de qué hace | -z comprime el exe de salida mucho

Código:

 mkbundle -o Bundled1.exe Winform1.exe --deps -z 

Así que ahora tienes tu Bundled1.exe, que contiene tu propia aplicación junto con Mono. No debería necesitar Mono ni .NET para ejecutarlo. Tenga en cuenta que tendrá un tamaño de 4 MB o más. Esos ex integrantes no son livianos.