viernes, 22 de septiembre de 2017

Going wild.

Un desarrollador de software experimentado desarrolla habilidades secundarias que pueden llegar a ser tanto o más importantes que su habilidad principal de desarrollar software.

Un ejemplo de un caso real es éste:


Yo tengo una historia parecida que contar.

Yo necesitaba incorporar unas librerías de código nativo en C a un enorme proyecto hecho con .Net 3.5. y sin posibilidad de migrar a una versión más reciente. Estas librerías vienen con un enlace programado en C#; por lo que en teoría es perfectamente viable usarlas.

El problema que me encontré fue que en NuGet, incluso la versión más antigua, estaba compilada para .Net4. De hecho, no encontré, en ningún sitio, ni ninguna versión ya compilada para .Net3.5, ni el código fuente.

Así que decidí ponerme salvaje e intentar locas medidas desesperadas.

Primeramente usé un inspector/decompilador de ensamblados (https://www.jetbrains.com/decompiler/) para acceder a la información interna del enlace programado en C#. Después de una hora de análisis e investigación y una vez que confirmé que no existía ningún impedimento técnico para que el enlace funcionase con .Net 3.5, cogí el código fuente del enlace del decompilador y todas sus dependencias que también fuesen enlaces de C# a código no administrado, y cree una solución con varios proyectos de librería con el target framework 3.5. Una vez enlazadas todas las dependencias entre proyectos lancé una compilación y TADA! Ya tenía los envoltorios C# perfectamente compilados para .Net 3.5 y completamente funcionales.

Happy coding bastardillos!

2 comentarios:

  1. Debido a temas legales no puedo poner capturas de pantalla ni codigo fuente real en este post.

    ResponderEliminar
  2. Las pocas veces que he usado decompiladores ha sido para ver cómo estaban haciendo alguna cosa interesante. Pero lo cierto es que nunca he intentado montar nada decompilado, básicamente porque el código decompilado nunca era perfecto.

    Impresionante trabajo en cualquier caso.

    ResponderEliminar