net framework code .net compilation native-code

framework - .net native



¿Cómo compilar una aplicación.NET para el código nativo? (12)

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

Sin embargo, esto significa que la compilació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.

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


A partir de 2012, ahora puede usar la ''biblioteca de clases portátil'' que está integrada en VS 2012.


Como algunas de las otras respuestas aquí han mencionado, puede usar la herramienta .NET Native para compilar 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 compilar nuestra aplicación; puedes encontrar un buen artículo al respecto here.

  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 compilará en un único archivo binario, como este:

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

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

dotnet compile --native --cpp

Eso optimizará tu programa 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 .


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


He probado varios de ellos y en este momento el único que admite .NET 3.5 y también tiene una gran pila 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 compila en código nativo para que pueda implementarlo en las máquinas sin la presencia de la estructura.


La naturaleza de .NET es poder instalar aplicaciones que se han compilado en MSIL, luego, ya sea por JIT o Ngen, MSIL se compila 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 dinámico, generación de código MSIL, etc.



Microsoft tiene un artículo que describe cómo puedes compilar 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 compilado 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 compilador just-in-time (JIT) para compilar el ensamblado original.

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


Puede hacerlo utilizando la nueva tecnología de precompilación llamada .NET Native. Compruébelo aquí: 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á compilado 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 compilación de mezcla y se basó en IL y JIT para escenarios dinámicos. .NET Native no utiliza JIT, pero admite varios escenarios dinámicos. Los autores del código necesitarían utilizar Directivas de tiempo de ejecución para proporcionar pistas sobre el compilador .NET Native en los escenarios dinámicos 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.


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

RemoteSoft Salamander


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.