Mucha gente aquí está probablemente familiarizada con una de las publicaciones de blog más populares de Joel Spolsky, Please Sir, May I Have a Linker, donde pide una forma para eliminar dependencias en .NET Framework para que una aplicación independiente pueda desarrollarse y venderse.El estado de Linkers para aplicaciones .NET (también conocido como "Por favor, señor, puedo tener un enlazador" edición 2009)
Jason Zander del equipo de desarrollo de Visual Studio, en el momento, respondió with his views on the topic, argumentando que el tema es un tanto discutible - la capacidad de solucionar los problemas de seguridad en el tiempo de ejecución (entre otros puntos) fue su principal preocupación. En general, la pequeña sobrecarga valió la pena.
Avance rápido hasta 2009. Hay algunos grupos por ahí que afirman tener enlaces de C#. (Jason Zander incluso dijo que no tardaría mucho en implementar uno.) En lugar de la linda descarga de .NET 1.0 de doce docenas, ahora tenemos un instalador .NET 3.5 completo y multiplataforma de 200-300 mb que contiene versiones de .NET para x86, x64 e ia64. sugerencias de Microsoft para disminuir el tamaño en tiempo de ejecución incluyen:
- Desembale el redistribuible, retire las plataformas de destino que no desee, y poner de nuevo juntos
- Uso del programa previo web que sólo descarga las bibliotecas para su plataforma
- Utilice el instalador perfil de cliente (nuevos a partir de finales de 2008), que tiene bibliotecas limitados y sólo funciona para x86
para empeorar las cosas, como lo entiendo (por favor, corríjanme si me equivoco) el cliente perfil ni siquiera se registra con Windows como teniendo instalado .NET 3.5. Esto significa que si hay múltiples aplicaciones cliente .NET 3.5 instaladas en la computadora, ninguna se verá y el tiempo de ejecución se volverá a instalar una y otra vez.
Realmente no sé lo que Microsoft está pensando aquí. Incluso suponiendo que la instalación en el peor de los casos será para una plataforma de destino (por ejemplo, x64) y solo se deben incluir esas bibliotecas, aún está viendo más de 60 MB de sobrecarga en su aplicación. Incluso una de las aplicaciones .NET más conocidas, Paint.NET, estaba cargada de Difficulties installing the application because of the massive .NET dependencies.. Si TIENEN problemas para distribuir una aplicación gratuita, ¿qué pasa con el resto del mundo? Al final, tenían que Make a bootstrapper that installed Microsoft Installer 3.1, the .NET runtime bootstrapper, and all their other dependent libraires antes de que pudieran instalar su propia aplicación.
¿Qué hay de eso? Un enlazador. ¿Existen algunos buenos, o una herramienta que simplemente hace posible la creación de una aplicación C# sin requerir que el usuario instale el masivo .NET runtime?
Actualización: así, parece que hay un par de opciones:
Mono:
- Mono has its own linker. De la respuesta a continuación, parece que funciona bastante bien.
.NET:
- Xenocode parece ser uno que está disponible y funciona.
- Thinstall es otra recomendada, y es de VMware.
- There's another linker by Remotesoft. Lo cargan como un "ofuscador". ¿Algún pensamiento allí?
- Found another by Rustemsoft called Skater .NET Obfuscator. ¿Alguien familiarizado con ellos?
- ILmerge by Microsoft was also suggested; esto parece que solo realiza una parte de la tarea (es decir, fusionar bibliotecas, no eliminar los bits no utilizados).
Parece que las herramientas Mono se están utilizando; ¿Qué tal las herramientas basadas en .NET? ¿Alguna otra experiencia con ellos, o solo tendremos que esperar a que Microsoft saque el 3.5 a todos? Me estremezco al pensar cuánto tiempo tardará en salir .NET 4.0 ...
¿No ILMerge tiene una opción que hace eso? – configurator
¡Tienes tanta razón! El instalador de un controlador de cámara web (42M) de Microsoft fue a la Web y descargó .NET 3.0 - tardó más de 10 minutos en 1.5 M ADSL ... Lo que me piden - solo para usar una cámara web ... –
No lo haría Sería tan malo si Microsoft no tardara tanto en sacar .NET 3.5 a todos. Si lo incluyeron en los últimos service packs como lo hicieron con .NET 2.0, la mayoría de la gente no tendría que lidiar con esta tontería. –