Convertir la aplicación .NET al código nativo x86

Hay un programa escrito completamente en C # que apunta a .NET Framework 2.0. ¿Hay alguna manera de compilar (traducir) EXE administrado a uno nativo para que pueda ser .NET-agnóstico? Sé que probablemente hay productos comerciales para ese propósito ... pero son un poco caros.

El problema es que debemos implementar el programa en computadoras que ejecutan Windows XP sin .NET Framework instalado. También existe el requisito de que el tamaño del programa no debe superar los 500 Kb (el máximo de 1 Mb) para que se descargue desde el servidor web (ahora el tamaño es de 255 Kb). Es por eso que no hay manera de que podamos adjuntar un .NET FX completo (o incluso uno reducido) al archivo del programa descargado.

Obviamente, es un error de ingeniería de software terrible que debería haber sido detectado y evitado antes para que podamos utilizar tecnologías nativas como C ++ en su lugar.

Hemos probado por ahora Novell's Mono, una implementación de código abierto de .NET Framework para Linux, MAC y Windows. Mono consta de compiladores C #, IDE, tiempo de ejecución (CLR) y ensamblajes de la biblioteca de clases (como System.dll y mscorlib.dll, muy parecidos a los ensamblajes de la biblioteca de clases de .NET instalados en GAC). Lo que intentamos hacer es localizar los archivos CLR y enviarlos junto con el archivo de nuestro programa y algunos ensamblajes. De esta manera, se puede invocar el programa ejecutando "mono program.exe" (símbolo del sistema) en la computadora de un usuario. Además de la inconveniencia de este uso para los usuarios, los archivos CLR (mono.exe y mono.dll) resultaron ser aproximadamente 2.5 Mb en total, lo que es mucho mayor que los 500 Kb o incluso 1 Mb deseados.

Por lo tanto, no nos queda otra opción que traducir nuestra aplicación .NET a una nativa por compilador, sin embargo, la pregunta sigue siendo: ¿qué compilador deberíamos usar y dónde podríamos encontrar una ...

Por ahora me he topado con un Proyecto de SO Singularity de Microsoft Research. Es un sistema operativo de investigación de código abierto que está escrito en código administrado (al menos en parte). El sistema operativo Singularity incluye un compilador Bartok que utiliza el sistema operativo para traducir un programa administrado a uno nativo (x86 32 bits). Cabe señalar que Bartok no puede traducir todos los aspectos de .NET 2.0 a un código nativo, pero la mayoría de ellos. Sin embargo, todavía no he aprendido a usar la Singularidad ...

Le agradecería mucho que me brindara algunos consejos y sugerencias útiles sobre el problema, su propia experiencia con Singularity OS y Bartok Compiler u otro enfoque del problema que haya pasado por alto y formas de resolverlo.

¡Muchas gracias por adelantado!

Finalmente, utilizando la función Full AOT de Mono (siguiendo los consejos de Callum Rogers), me las arreglé para producir un archivo program.exe que carece de un encabezado CLI. Entonces me parece un dll nativo. Sin embargo, no puedo averiguar cómo convertir esa dll en exe o hacerla operativa. Además, esta dll no parece exponer ninguna función de interés, como la función principal.

Respuestas a la pregunta(5)

Su respuesta a la pregunta