¿Cómo comstackr una aplicación .NET para el código nativo?

Si quiero ejecutar una aplicación .NET en una máquina donde .NET Framework no está disponible; ¿Hay alguna forma de comstackr la aplicación al código nativo?

Microsoft tiene un artículo que describe cómo puedes comstackr MSIL a código nativo

Puedes usar Ngen .

Native Image Generator (Ngen.exe) es una herramienta que mejora el rendimiento de las aplicaciones administradas. Ngen.exe crea imágenes nativas, que son archivos que contienen código máquina comstackdo específico del procesador, y las instala en la caché de imágenes nativas en la computadora local. El tiempo de ejecución puede usar imágenes nativas de la memoria caché en lugar de usar el comstackdor just-in-time (JIT) para comstackr el ensamblado original.

Desafortunadamente, todavía necesita las bibliotecas del marco para ejecutar su progtwig. No hay ninguna función que conozca con MS .NET Framework SDK que le permite comstackr todos los archivos necesarios en un solo ejecutable

RemoteSoft crea una herramienta que comstack una aplicación .NET en un paquete que se puede ejecutar sin .NET instalado. No tengo ninguna experiencia con eso:

RemoteSoft Salamander

He probado varios de ellos y en este momento el único que admite .NET 3.5 y también tiene una gran stack de virtualización es Xenocode Postbuild

Con ngen, aún necesita tener .NET Framework instalado, pero utilizando una herramienta como tal, todo su código administrado se comstack en código nativo para que pueda implementarlo en las máquinas sin la presencia de la estructura.

Microsoft ha anunciado su .NET Native Preview que permitirá ejecutar aplicaciones .NET sin tener instalado el framework.

Eche un vistazo: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx

Preguntas frecuentes: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

Puede descargar Microsoft .NET Native para VS2013 desde aquí: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Como algunas de las otras respuestas aquí han mencionado, puede usar la herramienta .NET Native para comstackr su aplicación al código máquina nativo. A diferencia de esas respuestas, sin embargo, explicaré cómo hacerlo.

Pasos:

  1. Instale la herramienta dotnet CLI (interfaz de línea de comandos), que es parte de la nueva cadena de herramientas .NET Core. Lo usaremos para comstackr nuestra aplicación; puedes encontrar un buen artículo al respecto aquí.

  2. Abra un aviso de shell y cd al directorio de su aplicación.

  3. Escribe esto:

     dotnet compile --native 

¡Eso es! Cuando termines, tu aplicación se comstackrá en un único archivo binario, como este:

Nativo compilado .NET Core EXE

Será un ejecutable independiente; no se incluyen PDB, ensambles ni archivos de configuración (¡hurra!).


Alternativamente, si quiere un progtwig aún más rápido, puede ejecutar esto:

 dotnet compile --native --cpp 

Eso optimizará tu progtwig usando el generador de códigos C ++ (a diferencia de RyuJIT), por lo que tu aplicación está aún más optimizada para los escenarios AOT.

Puede encontrar más información sobre esto en dotnet CLI GitHub repo .

Sí, usando Ngen , el generador de imágenes nativas. Sin embargo, hay una serie de cosas que debe tener en cuenta:

  • Aún necesita el CLR para ejecutar su ejecutable.
  • El CLR no optimizará dinámicamente sus ensamblajes en función del entorno en el que se ejecuta (por ejemplo, 486 frente a 586 frente a 686, etc.)

En general, solo vale la pena usar Ngen si necesita reducir el tiempo de inicio de su aplicación.

¡Usted puede! Sin embargo, está restringido a .NET 1.1 (no generics para usted): comstackción Mono Ahead-Of-Time (AOT)

Sin embargo, esto significa que la comstackción es realmente nativa, por lo que ya no podrá implementar un único ensamblado de código de bytes, necesitará uno por plataforma.

Originalmente fue diseñado porque no hay .NET o Mono para iPhone, así es como hicieron MonoTouch.

Puede hacerlo utilizando la nueva tecnología de precomstackción llamada .NET Native. Compruébelo aquí: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Actualmente solo está disponible para las aplicaciones de la tienda de Windows. Realiza enlaces de componente único. Así que las bibliotecas de .NET Framework están vinculadas estáticamente a su aplicación. Todo está comstackdo en nativo y los ensamblajes de IL ya no se implementan. Las aplicaciones no se ejecutan contra CLR, sino un tiempo de ejecución optimizado y reducido denominado Managed Runtime (Mrt.dll)

Como se indicó anteriormente, NGEN utilizó un modelo de comstackción de mezcla y se basó en IL y JIT para escenarios dynamics. .NET Native no utiliza JIT, pero admite varios escenarios dynamics. Los autores del código necesitarían utilizar Directivas de tiempo de ejecución para proporcionar pistas sobre el comstackdor .NET Native en los escenarios dynamics que desean admitir.

Puede usar ngen.exe para generar una imagen nativa, pero igual tiene que distribuir el código original no nativo y aún necesita el marco instalado en la máquina de destino.

Lo cual no resuelve tu problema, realmente.

La naturaleza de .NET es poder instalar aplicaciones que se han comstackdo en MSIL, luego, ya sea por JIT o Ngen, MSIL se comstack en código nativo y se almacena localmente en un caché. Nunca fue intencionado al generar un verdadero .exe nativo que se puede ejecutar independientemente del .NET Framework.

Tal vez haya algún truco que haga esto, pero no parece seguro para mí. Hay demasiadas dinámicas que requieren el marco, como: carga de ensamblaje dynamic, generación de código MSIL, etc.

Creo que no es posible. Necesitarás distribuir .NET FW también. Si desea comstackr la aplicación .NET con el código nativo, utilice la herramienta NGen