¿Es posible ver el código IL generado al llamar a Compile() en un árbol de Expresión? Considere este ejemplo muy simple:Visualización del código IL generado a partir de una expresión compilada
class Program
{
public int Value { get; set; }
static void Main(string[] args)
{
var param = Expression.Parameter(typeof(Program));
var con = Expression.Constant(5);
var prop = Expression.Property(param, typeof(Program).GetProperty("Value"));
var assign = Expression.Assign(prop, con);
Action<Program> lambda = Expression.Lambda<Action<Program>>(assign, param).Compile();
Program p = new Program();
lambda(p);
//p.Value = 5;
}
}
Ahora, el árbol de expresión hace lo que la última línea de Main
dice. Compila la aplicación, luego ábrela en Reflector. Puede ver el código IL de p.Value = 5;
que hace la asignación. Pero el árbol de expresiones se creó y compiló en tiempo de ejecución. ¿Es posible ver el código IL resultante de la compilación?
hacer lo que desea el equivalente * * IL por lo que están haciendo * * (es decir, el establecimiento de una propiedad)? ¿O hay algo sobre la salida 'Expression' que le interesa específicamente? –
Nada específico. Me gusta mirar el código IL de vez en cuando. Pero con expresiones puedes hacer un método que no obtenga IL en el ensamblado compilado. El IL solía * crear * ese árbol de expresión está allí, pero no es el resultado de la compilación del árbol de expresión. ¿Tiene sentido? Esto es simplemente una curiosidad y no tiene ningún propósito práctico real que pueda ver. – Amy
¿Has probado con la gran herramienta ** LinqPad **? http://www.linqpad.net/ Con él puede mostrar el código generado como MSIL y experimentar rápidamente casi cualquier cosa ... – AFract