¿Hay una buena envoltura alrededor de ILGenerator? [cerrado]
Estoy usando System.Reflection.Emitir por un tiempo y encontrarlo (¿quién no?) Tan doloroso como propenso a los errores.
¿Sabe si hay una buena envoltura alrededor del generador de IL, algo en lo que puedo confiar para emitir IL de una manera más segura y más fácil que con jugar directamente con SRE?
Editar:
Sé que manipular árboles de expresión es definitivamente más fácil y más seguro que emitir IL directamente, pero ahora también tienen algunas restricciones. No puedo crear bloques de código, usar bucles, declarar y trabajar con varios locales, etc. Necesitamos esperar hasta que salga .NET 4 :)
Además, estoy tratando con una base de código que ya se basa en SRE.
Obviamente, ILGenerator hace todo lo que necesito. Pero agradecería más ayuda a la hora de manipularlo. Cuando me refiero a un envoltorio ILGenerator, que se mantiene en un nivel bastante bajo, pienso en algo que podría proporcionar métodos como:
// Performs a virtual or direct call on the method, depending if it is a
// virtual or a static one.
Call(MethodInfo methodInfo)
// Pushes the default value of the type on the stack, then emit
// the Ret opcode.
ReturnDefault(Type type)
// Test the object type to emit the corresponding push
// opcode (Ldstr, Ldc_I*, Ldc_R*, etc.)
LoadConstant(object o)
Es realmente 3 ejemplos ingenuos, pero podría ser suficiente para demostrar lo que espero. Podemos verlo como un conjunto de métodos de extensión, pero podría ser bueno tener soporte para sentencias condicionales y bucles como enRunSharp. De hecho, RunSharp está bastante cerca de lo que quiero, pero abstrae demasiado al ILGenerator y no expone toda su funcionalidad.
No puedo recordar dónde, pero ya vi a un colaborador de este tipo en un proyecto de código abierto.