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

Место общения программистов C#
Ответить
Anonymous
 Expression.DebugInfo Как пометить выражения?

Сообщение Anonymous »

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

Код: Выделить всё

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»

Подробнее здесь: https://stackoverflow.com/questions/676 ... xpressions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»