Espacio de Dario Quintana

Linking assemblies

Linker, es una libreria que escribió Jb, y se encarga de reducir al mínimo el conjunto de funciones assemblies para que un conjunto de programas puedan correr. En otras palabras, toma las librerias que necesita un programa y elimina de ellas los métodos ó tipos que no son necesarios.

Pueden obtener el código del SVN, y compilarlo. Requiere Mono.Cecil.

Linker es una simple aplicación de consola, y toda la magia ocurre en una sola linea de comandos. Antes que nada, veamos que tenemos. Los archivos necesarios para que la aplicación Mono.Sms.exe funcionen son: Castle.Core.dll, Castle.Windsor.dll, Castle.MicroKernel.dll y Castle.DynamicProxy.dll. Ponemos todos archivos en el mismo directorio que el ejecutable Mono.Sms.exe. Luego ejecutamos:

monolinker -a Mono.Sms.exe -out linkedfiles/ -x descritor.xml

Donde indicamos cual va a ser la aplicación objetivo, el directorio de salida, y el archivo xml descritor con los tipos que se desean preservar despues del proceso de linkeo. Nuestro archivo con los tipos que no queremos que Linker los eliminie es el siguiente:

<?xml version="1.0" encoding="utf-8" ?>
<linker>
  <assembly fullname="Castle.Windsor">
    <namespace fullname="Castle.Windsor.Configuration.Interpreters.XmlProcessor.ElementProcessors"/>
    <type fullname="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler"/>
  </assembly>
</linker>

Con esto indicamos que el namespace ElementProcessors, y el tipo CastleSectionHandler deben ser incluidos en la salida. Este descritor lo tuve que elaborar porque Linker omitia el tipo CastleSectionHandler, y tambíén eliminaba los constructores de los tipos contenidos en el namespace ElementProcessors. Como lo supe? Prueba y error.

Ahora veamos el resultado:

Ahora que hemos reducido, el tamaño de los assemblies, imaginense otra herramienta para juntar todos los assemblies en 1 sólo. La filosofía XCOPY de .Net, se convertiria en la COPY, nada más. Por estos caminos anda también Jb, que según dijo, está reescribiendo a monomerge (actualmente se cae).

No Responses to “Linking assemblies”

RSS feed for comments on this post. TrackBack URL

Leave a Response