Pregunta

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

¿Fue útil?

Solución

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

Puedes usar Ngen.

El generador de imágenes nativo (ngen.exe) es una herramienta que mejora el rendimiento de las aplicaciones administradas.Ngen.exe crea imágenes nativas, que son archivos que contienen un código de máquina compilado específico del procesador, y las instala en el caché de imágenes nativo en la computadora local.El tiempo de ejecución puede usar imágenes nativas de la memoria caché en su lugar utilizando el compilador justo en el tiempo (JIT) para compilar el ensamblaje original.

Desafortunadamente, todavía necesitas las bibliotecas del marco para poder ejecutar tu programa.No conozco ninguna característica del SDK de MS .Net Framework que le permita compilar todos los archivos necesarios en un único ejecutable.

Otros consejos

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:

Salamandra RemoteSoft

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 Xenocódigo Postconstrucción

Con ngen aún necesita tener instalado el marco .NET, pero al utilizar una herramienta como tal, todo el código administrado se compila en código nativo para que pueda implementarlo en máquinas sin la presencia del marco.

Microsoft ha anunciado su Vista previa nativa de .NET que permitirá ejecutar aplicaciones .NET sin tener el framework instalado.

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

PREGUNTAS MÁS 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 el .NET Nativo herramienta para compilar su aplicación en código de máquina nativo.Sin embargo, a diferencia de esas respuestas, explicaré cómo para hacerlo.

Pasos:

  1. Instala el CLI de puntonet (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. Abra un símbolo del shell y cd al directorio de su aplicación.

  3. Escribe esto:

    dotnet compile --native
    

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

Native compiled .NET Core EXE

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


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

dotnet compile --native --cpp

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

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

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

  • Aún necesitas el CLR para ejecutar tu ejecutable.
  • El CLR no optimizará dinámicamente sus ensamblajes en función del entorno en el que se ejecuta (p. ej.486 vs.586 vs.686, etc.)

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

¡Puede!Sin embargo, está restringido a .NET 1.1 (no hay 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.

Fue diseñado originalmente porque no existe .NET o Mono para iPhone, así es como crearon MonoTouch.

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

Actualmente sólo está disponible para aplicaciones de la Tienda Windows.Realiza vinculación de un solo componente.Entonces, las bibliotecas de .NET Framework están vinculadas estáticamente a su aplicación.Todo se compila en forma nativa y los ensamblados IL ya no se implementan.Las aplicaciones no se ejecutan en CLR, sino en un tiempo de ejecución simplificado y optimizado llamado Managed Runtime (Mrt.dll).

Como se indicó anteriormente, NGEN utilizó un modelo de compilación mixto y se basó en IL y JIT para escenarios dinámicos..NET Native no utiliza JIT pero admite varios escenarios dinámicos.Los autores de código necesitarían utilizar Directivas de tiempo de ejecución para proporcionar sugerencias al compilador .NET Native sobre los escenarios dinámicos que desean admitir.

Puedes usar ngen.exe para generar una imagen nativa. pero También debe 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, de verdad.

La naturaleza de .NET es poder instalar aplicaciones que han sido compiladas en MSIL, luego, ya sea mediante JIT o Ngen, MSIL se compila en código nativo y se almacena localmente en un caché.Nunca se pretendió generar un verdadero .exe nativo que pueda ejecutarse independientemente del marco .NET.

Tal vez haya algún truco que haga esto, pero no me parece seguro.Hay demasiadas dinámicas que requieren el marco, como por ejemplo:carga dinámica de ensamblados, generación de código MSIL, etc.

Respuesta 2019:Usar dotnet/corert.Puede compilar proyectos .NET Core en forma independiente .exe archivos.Sin dependencias (excepto bibliotecas del sistema como kernel32.dll).Apuesto a que esto es exactamente lo que necesita el OP.

Desde su página de inicio de GitHub:

El compilador CoreRT puede compilar una aplicación .NET Core administrada en un archivo ejecutable nativo (específico de la arquitectura) que sea fácil de implementar.También puede producir bibliotecas dinámicas o estáticas independientes que pueden ser consumidas por aplicaciones escritas en otros lenguajes de programación.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top