¿Puede comstackr C # para que no necesite .NET Framework en tiempo de ejecución?

¿Es posible forzar al comstackdor de C # a sacar todas las llamadas referenciadas del marco y empaquetarlas en dlls o incluso en un solo ejecutable?

Me gusta escribir aplicaciones rápidas “únicas” con C #, sin embargo, no quiero tener que instalar toda la infraestructura en la máquina de destino una vez que esté lista para funcionar.

Usted hace una pregunta cargada. C # es simplemente un lenguaje y no requiere .NET Framework. El proceso de comstackción requiere un comstackdor, que puede o no tener una dependencia de .NET Framework (el comstackdor de C # de Microsoft no está escrito en código nativo). Su progtwig necesitará hacer referencia a algún ensamblaje donde se puedan encontrar tipos, clases y métodos para su uso. Puede eliminar system.dll y mscorlib.dll de su lista de referencias y hacer referencia a sus propios ensamblados. Por lo tanto, puede evitar dependencias en .NET Framework si realmente trabaja en ello. Pero al final, a menos que tenga un comstackdor de C # que comstack progtwigs con código nativo, todavía tiene una dependencia en el CLR.

Esa es una forma muy técnica de decir … casi nada. Pero responde tu pregunta. 🙂 Sin embargo, más útil desde el punto de vista práctico es cómo hacer que tus progtwigs C # se ejecuten con un mínimo de dependencias. mkbundle from mono realmente te permitirá comstackrlo todo en un .exe virtualmente sin dependencias.

Pero si desea seguir con Microsoft .NET Framework, puede lograr un espacio mucho más ligero y una instalación más rápida de las dependencias que comúnmente necesita utilizando el perfil de cliente de .NET 3.5 SP1. Puede leer sobre esto aquí: http://msdn.microsoft.com/en-us/library/cc656912.aspx

Mira mkbundle usando Mono.

Ahora es posible comstackr C # con el código nativo usando Microsoft .NET Native: https://msdn.microsoft.com/en-us/library/dn584397(v=vs.110).aspx

Se comstack automáticamente la versión de lanzamiento de las aplicaciones que están escritas en código administrado (C # o Visual Basic) y que se dirigen a .NET Framework y Windows 10 a código nativo.

Para los usuarios de sus aplicaciones, .NET Native ofrece estas ventajas:

• Tiempos de ejecución rápidos

• Tiempos de arranque constantemente rápidos

• Bajo costo de implementación y actualización

• Uso optimizado de la memoria de la aplicación

Esto solo funciona con Visual Studio .NET 2015.

Eche un vistazo al perfil de cliente .NET. Esto le permitirá empaquetar una instalación mínima en la máquina cliente … que luego se actualizará mediante la actualización de Windows al marco completo.

Esto depende, por supuesto, de que su aplicación solo use bibliotecas que están contenidas en el perfil del cliente …

Alguna información aquí: http://blogs.windowsclient.net/trickster92/archive/2008/05/21/introducing-the-net-framework-client-profile.aspx

Se dice que es posible, utilizando herramientas de terceros como http://www.remotesoft.com/linker/

Imposible. Su aplicación “comstackda” C # es un lenguaje que interpreta .Net CLR (debería haber dicho JITed, Reads IL, comstack a código nativo y luego invoca el código nativo comstackdo) en tiempo de ejecución.

FYI .net 2.0 es una instalación estándar en XP SP2 y Vista, por lo que no tendrá que pagar una multa.

Podrías mirar en mono, pero esto todavía implica ejecutar algún tipo de framework en tu máquina objective.

Esta dependencia que desafortunadamente se rompe o falta en el mundo real es una gran razón por la cual C # no ha tenido una adopción más amplia. Por otro lado, la mayoría del desarrollo tiene dependencias. Mire C ++ y Java, por ejemplo.

No creo que realmente nos alejemos de estos problemas de dependencia pronto, así que le recomiendo que si desea usar C #, haga un contenedor para la instalación que verifique la dependencia de la versión de .NET Framework que necesita, y si falta notifique al usuario que lo necesita para ejecutar su aplicación.

Algunas características de C # están vinculadas a las interfaces de .NET framework.

Por ejemplo:

yield return requiere la interfaz IEnumerable

using (x) {} requiere la interfaz IDisposable