Expression.DebugInfo Как пометить выражения?

Итак, я знаю, для чего используется Expression.DebugInfo, и у меня создано выражение отладки, но как пометить другие выражения этой отладочной информацией? Вот что я пробую в качестве действительно базового теста:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using System.Reflection;

namespace ExpressionDebugTest
{
    class Program
    {
        static void Main(string[] args)
        {

            var asm = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("foo"), System.Reflection.Emit.AssemblyBuilderAccess.RunAndSave);

            var mod = asm.DefineDynamicModule("mymod", true);
            var type = mod.DefineType("baz", TypeAttributes.Public);
            var meth = type.DefineMethod("go", MethodAttributes.Public | MethodAttributes.Static);

            var sdi = Expression.SymbolDocument("TestDebug.txt");

            var di = Expression.DebugInfo(sdi, 2, 2, 2, 12);


            var exp = Expression.Divide(Expression.Constant(2), Expression.Subtract(Expression.Constant(4), Expression.Constant(4)));
            var block = Expression.Block(di, exp);

            Expression.Lambda(block, new ParameterExpression[0]).CompileToMethod(meth);

            var newtype = type.CreateType();
            asm.Save("tmp.dll");
            newtype.GetMethod("go").Invoke(null, new object[0]);
            //meth.Invoke(null, new object[0]);
            //lambda.DynamicInvoke(new object[0]);
            Console.WriteLine(" ");
        }
    }
}

Я знаю, что информация об отладке работает только для скомпилированных методов, поэтому я генерирую сборку на лету. Но когда этот код вызывает ошибку «делить на ноль», он не показывает мой файл «TestDebug.txt»

7
задан skaffman 21 July 2011 в 12:15
поделиться