preguntas anteriores han preguntado si es posible convertir los delegados compilados en los árboles de expresión, por ejemplo:¿Existe una biblioteca que pueda descompilar un método en un árbol de expresiones, con soporte para CLR 4.0?
Las respuestas sanas en el momento eran:
- Es posible , pero es muy difícil y no hay una solución de biblioteca estándar.
- ¡Utilice el reflector!
Pero, afortunadamente, hay personas muy locos/increíblemente geniales que gustan de la ingeniería inversa y facilitan las cosas difíciles para el resto de nosotros.
Claramente es posible descompilar IL a C#, como Reflector lo hace, y por lo tanto podría en principio en lugar de árboles de expresión CLR 4.0 con soporte para todos los tipos de instrucción. Esto es interesante porque no importaría si el soporte especial integrado del compilador para Expression<>
lambdas nunca se extiende para soportar árboles de expresión de instrucciones de compilación en el compilador. Una solución de biblioteca podría llenar el vacío. Entonces tendríamos un punto de partida de alto nivel para escribir manipulaciones de código tipo aspecto sin tener que meternos con IL sin procesar.
Como se señala en las respuestas a la pregunta vinculada anterior, there are some promising signs, pero no he podido encontrar si ha habido mucho progreso desde la búsqueda.
Entonces, ¿alguien ha terminado este trabajo, o ha llegado muy lejos con él?
Nota: CLR 4.0 ya está disponible. Es hora de otro look-see.
Supongo que es un poco demasiado temprano. CLR 4.0 aún no ha sido lanzado aún. Me encantaría ver algo así, sin embargo. –
¿vs2010 no hace algo como esto? Simplemente estoy sugiriendo que si VS puede hacerlo, debe haber algo en las herramientas de compilación/framework que sea capaz de hacerlo, por lo tanto ... alguien tiene la respuesta. Oh, he visto una sugerencia aquí en algún lado (aunque no tengo el enlace para disculpar a la mano) que puede haber una forma de explicar definiciones de objetos como XML y luego usar la reflexión para emitir código para eso. inversa de eso tal vez ... ¿hay un reverso de emitir en el espacio de nombres de reflexión en algún lugar tal vez? – War
@Wardy: No sé por qué crees que VS descompila el código. Dado que incluye un compilador, cualquier código que quiera mostrar se puede encontrar en el código fuente original. – Gabe