Cómo compilar a.NET aplicación a código nativo?


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 en código nativo?

Author: shA.t, 2008-09-05

11 answers

Microsoft tiene un artículo que describe cómo se puede Compilar MSIL a Código nativo

Puede usar Ngen.

El Generador de Imágenes Nativo (Ngen.exe) es una herramienta que mejora la rendimiento de las aplicaciones gestionadas. Ngen.exe crea imágenes nativas, que son archivos que contienen compilado código de máquina específico del procesador, y los instala en la imagen nativa caché en el equipo local. El runtime puede utilizar imágenes nativas de la caché en su lugar uso del just-in-time (JIT) compilador para compilar el original Asamblea.

Desafortunadamente, todavía necesita las bibliotecas del framework para ejecutar su programa. No hay ninguna característica que conozca con el SDK de MS. Net framework que le permita compilar todos los archivos necesarios en un solo ejecutable

 42
Author: Espo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-05 12:50:23

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 él:

RemoteSoft Salamander

 23
Author: Simon Steele,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-05 12:51:05

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

Con ngen todavía necesita tener instalado.NET framework, pero utilizando una herramienta como tal, todo su código administrado se compila en código nativo para que pueda implementarlo en máquinas sin la presencia del marco.

 19
Author: Erick Sgarbi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-05 13:02:42

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

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

FAQ: 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

 17
Author: thepirat000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-09 22:18:36

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

Pasos:

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

  2. Abrir una concha preguntar y cd al directorio de tu app.

  3. Escriba esto:

    dotnet compile --native
    

¡Eso es todo! Cuando haya terminado, su aplicación se compilará en un solo binario, como esto:

Núcleo de. NET compilado nativo EXE

Será un ejecutable independiente; no incluye PDBs, ensamblajes o archivos de configuración (¡hurra!).


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

dotnet compile --native --cpp

Que optimizará su programa utilizando el generador de código C++ (como opuesto a RyuJIT), por lo que su aplicación está aún más optimizada para escenarios AOT.

Puedes encontrar más información sobre esto en la CLI de dotnet GitHub repo.

 13
Author: James Ko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-08 15:08:26

Sí, usando Ngen, el Generador de Imágenes Nativo. Hay, sin embargo, una serie de cosas que debe tener en cuenta:

  • Todavía necesita el CLR para ejecutar su ejecutable.
  • El CLR no dinámicamente optimizar sus asambleas de base en el medio ambiente de ejecución (por ejemplo, 486 vs 586 vs 686, etc.)

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

 11
Author: Chris Zwiryk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-05 14:39:09

¡Puedes! Sin embargo, está restringido a. NET 1.1 (no hay genéricos para usted): Mono Ahead-Of-Time compilation (AOT)

Sin embargo, esto significa que la compilación es realmente nativa, por lo que ya no podrá implementar un solo ensamblado de bytecode, necesitará uno por plataforma.

Fue diseñado originalmente porque no hay.NET o Mono para iPhone, así que así es como hicieron MonoTouch.

 10
Author: Camilo Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-13 03:46:16

Puede hacer esto usando la nueva tecnología de precompilación llamada.NET Native. Échale un vistazo aquí: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Actualmente solo está disponible para aplicaciones de la Tienda Windows. Realiza enlaces de componentes individuales. Por lo tanto, las bibliotecas de.NET Framework están vinculadas estáticamente a su aplicación. Todo se compila a los ensamblados nativos y IL ya no se despliegan. Las aplicaciones no se ejecutan en CLR, sino en un tiempo de ejecución optimizado y reducido llamado Tiempo de ejecución administrado (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 soporta varios escenarios dinámicos. Los autores del código tendrían que utilizar Directivas de tiempo de ejecución para proporcionar sugerencias al compilador nativo de.NET sobre los escenarios dinámicos que desean soportar.

 6
Author: m_eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-21 01:28:17

Puede usar ngen.exe para generar una imagen nativapero todavía tiene que distribuir el código original no nativo también, y todavía necesita el marco instalado en la máquina de destino.

Que no resuelve tu problema, realmente.

 4
Author: Matt Bishop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-05 12:56:56

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 una caché. Nunca tuvo la intención de generar un verdadero nativo .exe que se puede ejecutar independientemente de. NET framework.

Tal vez hay algún truco que hace esto, pero no suena seguro para mí. Hay demasiadas dinámicas que requieren el marco, tales como: carga de ensamblado dinámico, generación de código MSIL, etc.

 1
Author: spoulson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-05 13:02:10

Creo que no es posible. También tendrá que distribuir. NET FW. Si desea compilar la aplicación. NET a código nativo, use la herramienta NGen

 -3
Author: aku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-05 12:51:30