2009-03-20 5 views
70

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:

.NET:

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 ...

+0

¿No ILMerge tiene una opción que hace eso? – configurator

+0

¡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 ... –

+0

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. –

Respuesta

49

El caso del Mono Linker.

No puedo hablar mucho sobre las otras piezas de software que se enumeran aquí, pero como el autor de la Mono Linker, puedo decir lo que hace y lo que no.

El Mono Linker es solo un enlazador administrado, por lo que toma asambleas y elimina lo que no es necesario para ejecutar un programa. No fusiona ensamblajes todos juntos, y no hace un programa nativo de ellos.

Hay un clon MonoMerge de ILMerge, pero no está completo, y su autor no lo está manteniendo. Para generar un programa nativo que contenga el tiempo de ejecución Mono y los ensamblajes, Mono proporciona el mkbundle tool.

Además, como solo es una herramienta administrada, que está alterando ensamblajes, si le da ensamblajes con nombres fuertes y no tiene las claves privadas para volver a iniciar sesión, tendrá problemas al ejecutar esos ensamblados .

escribí un par de entradas de blog sobre el enlazador:

sobre nuestra experiencia con el conector. El Enlazador se usa actualmente en dos partes del proyecto Mono. Se usa para generar el ensamblado que distribuimos para que las personas incorporen nuestro compilador de C#, Mono.CSharp.dll. Puede ver Miguel's presentation en el PDC, que describe cómo lo hacemos.Es bastante sencillo, y es un uso básico del Enlazador, que es una herramienta personalizable, y es bastante fácil escribir pasos personalizados para él.

Un uso más complejo del Enlazador es el camino we create our Moonlight assemblies. Moonlight es nuestra implementación de Silverlight, los ensamblajes son un subconjunto de los ensambles de escritorio. Así que vinculamos nuestros ensambles de escritorio para reducir sus tamaños y, mediante pasos personalizados, estamos transformando la API pública para que coincida con la de Silverlight.

Así que sí, el Enlazador tiene algunos bordes bastante ásperos, como la interfaz de línea de comandos, por ejemplo, o el hecho de que usted tiene que saber realmente lo que está haciendo, o puede terminar con algunos ensamblajes extraños, pero en general, funciona realmente bien para nosotros.

+22

+10 por ser genial y escribir el mono linker :) –

+2

el enlazador también se usa para Monotouch para evitar el hecho de que Apple no permitirá la instalación de intérpretes y máquinas virtuales en el código el iphone –

+6

Matthew: bueno, no realmente. El enlazador se usa en MonoTouch para reducir el tamaño de la aplicación final. Es el compilador de AOT que elude la limitación de JIT –

2

Este es el principal que escuché de hace mucho tiempo en .NET Rocks. Nunca me dieron un cambio de probarlo aunque

http://www.remotesoft.com/linker/

+0

el enlace parece estar muerto – Simon

+0

Acabo de intentarlo. Funcionó bien para mí –

+0

Enlace válido. Costo $ 1249. Supongo que ese es el impuesto .net. Me alegro de haber ido a la web. –

5

Fwiw

Mono tiene had a linker durante bastante tiempo.

Aquí hay un example de cómo usar mkbundle.

+0

Tan bueno como el enlazador es :), bastante no resuelve el problema particular aquí. Mono's Linker es administrado, y solo funciona en ensamblajes administrados. –

+0

Bueno, entonces echa un vistazo a mkbundle - http: //linux.die.net/man/1/mkbundle. – supercheetah

+0

sambo99, ¿has tenido alguna experiencia con él? –

2

utilizado nunca, pero he oído que puede hacer cosas similares con los registros del perfil .NET Reactor

3

cliente con Windows, pero de una manera especial, ya que no quieren confundir una máquina con perfil de cliente sólo con una máquina con el perfil completo .net 3.5

cliente:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\DotNetClient\v3.5\Install 

completa .net 3.5:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\Install 
2

estaba arguing (under my pen name "Mr Analogy") la necesidad de un enlazador en el foro de Joel por un tiempo antes de escribir este artículo. La proliferación de enlazadores parece haber justificado mi preocupación (tristemente).

http://www.thinstall.com/

De la gente que he hablado, es bastante bien considerado, aunque la última he comprobado la concesión de licencias era onerosa ($ 2k/año por la concesión de licencias de aplicaciones). Parecen dirigirse a tiendas de TI en lugar de al desarrollador de SW. El hecho de que no pueda encontrar precios en su sitio sugiere (para mí) que es costoso.

5

http://www.xenocode.com/

Esto es lo que usamos. Hasta ahora, después de un año o de un uso algo limitado (tal vez 500 instalaciones en la naturaleza), cero problemas.

Y tiene un precio bastante razonable. Tienen un software de virtualización completo más caro (que agrupa su aplicación con otras aplicaciones e incluso una O/S). Pero no necesitamos todo eso. Nuestro costo hace aproximadamente un año era de $ 400. Creo que ahora es un poco más caro, pero mucho menos que Thinstall.

Y tienen grandes demostraciones que se pueden descargar, como IE 8. No install required.

Cuestiones relacionadas