2009-02-15 22 views

Respuesta

37

Usted hace una pregunta cargada. C# es simplemente un lenguaje y no requiere .NET Framework. El proceso de compilación requiere un compilador, que puede o no tener una dependencia de .NET Framework (el compilador de C# de Microsoft no está escrito en código nativo). Su programa necesitará hacer referencia a algún ensamblaje donde se puedan encontrar tipos, clases y métodos para su uso. Usted puede eliminar system.dll y mscorlib.dll de su lista de referencias y hacer referencia a sus propios ensamblajes. Por lo tanto, puede evitar dependencias en .NET Framework si realmente trabaja en ello. Pero al final, a menos que tenga un compilador de C# que compila programas 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 programas C# se ejecuten con un mínimo de dependencias. mkbundle from mono realmente te permitirá compilarlo todo en un .exe virtualmente sin dependencias.

Pero si quiere 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 al respecto aquí: http://msdn.microsoft.com/en-us/library/cc656912.aspx

+0

muy informativo - gracias –

+0

Estoy tratando de hacer lo mismo con Visual Studio, y me dicen que es imposible. – muttley91

+0

¿Qué es "esto mismo"? Hablo de varias opciones aquí. –

13

Mire mkbundle usando Mono.

+0

fresco pienso Im que va a ir esta ruta - gracias! –

+0

Estoy seguro de que había una herramienta para Windows que solía hacer eso hace un * largo * tiempo. Tal vez ILMerge? – configurator

+0

¿hay un instalador de Windows para el mono ide? Encontré la fuente, pero me está costando encontrar un binario. supongo que podría simplemente compilarlo pero me da más oportunidades de arruinar algo ... –

2

No es posible. Su aplicación "compilada" C# es un lenguaje que interpreta .Net CLR (debería haber dicho JITed, Reads IL, compila a código nativo y luego invoca el código nativo compilado) 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 tan grande.

Puede buscar en mono, pero esto todavía implica la ejecución de algún tipo de marco en su máquina de destino.

+3

"Su" compilada "aplicación C# es un lenguaje que .Net CLR interpreta en tiempo de ejecución." - basura, simplemente no es cierto. La primera vez que un código administrado se ejecuta en una máquina determinada, se compila JIT con el código nativo para esa máquina. C# nunca se interpreta. – tomfanning

+3

Algo está mal en los internets. – Spence

+1

@tomfanning Pero todavía necesita el CLR para ejecutar el código compilado, ¿verdad? Entonces, si la primera vez que se ejecuta el bytecode, se compila JIT, e incluso en las ejecuciones posteriores es administrado por CLR, ¿qué hay de malo en decir que CLR "interpreta (el código) en tiempo de ejecución"? –

5

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, en su aplicación sólo el uso de bibliotecas que están contenidos en el perfil de cliente ...

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

5

Se dice que es posible, el uso de herramientas de 3 ª parte como http://www.remotesoft.com/linker/

+0

Para un sitio web terriblemente feo que se ve como un producto increíble, especialmente si le preocupa el robo de fuentes, ya que la ofuscación es casi trivial para un verdadero cracker. –

-2

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

Por ejemplo:

yield return requiere la interfaz IEnumerable

using (x) {} requiere la interfaz IDisposable

+1

Esto no tiene nada que ver con lo que pidió OP. Preguntó por la compilación * estática * de las librerías .NET junto con el programa. –

+0

Bueno, el título original era "¿Puedes compilar C# sin usar .Net framework?" – Rauhotz

0

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

No creo que realmente podamos alejarnos de estos problemas de dependencia en el corto plazo, por lo que le recomiendo que si desea usar C#, haga un contenedor para la instalación que verifique la dependencia de la versión .net framework que necesita y si falta, notifique al usuario que necesita esto para ejecutar su aplicación.

6

Ahora es posible compilar C# a código nativo utilizando Microsoft .NET nativo: https://msdn.microsoft.com/en-us/library/dn584397(v=vs.110).aspx

Se compila automáticamente la versión de lanzamiento de aplicaciones que están escritos en código administrado (C# o Visual Basic) y que apunte el .NET Framework y Windows 10 al código nativo.

...

Para los usuarios de sus aplicaciones, .NET nativo ofrece las siguientes ventajas:

• Los tiempos de ejecución rápida

• tiempos de arranque rápidos Consistentemente

• Bajos costos de implementación y actualización

• uso de memoria aplicación optimizada

Esto sólo funciona con Visual Studio .NET 2015.

+0

Solo funciona en UWP – Cooper

Cuestiones relacionadas