Теперь я переношу некоторую библиотеку, которая использует выражения в приложении .Net Core
и столкнулась с проблемой, что вся моя логика основана на LambdaExpression.CompileToMethod
, который просто отсутствует. Вот пример кода:
public static MethodInfo CompileToInstanceMethod(this LambdaExpression expression, TypeBuilder tb, string methodName, MethodAttributes attributes)
{
...
var method = tb.DefineMethod($"<{proxy.Name}>__StaticProxy", MethodAttributes.Private | MethodAttributes.Static, proxy.ReturnType, paramTypes);
expression.CompileToMethod(method);
...
}
Можно ли каким-либо образом переписать его, чтобы дать возможность генерировать методы с использованием выражений? Я уже могу сделать это с помощью Emit
, но он довольно сложный, и я бы хотел его избежать в пользу высокоуровневых выражений.
Я попытался использовать var method = expression.Compile().GetMethodInfo();
, но в этом случае я получаю сообщение об ошибке:
System.InvalidOperationException: невозможно импортировать глобальный метод или поле из другого модуля.
Я знаю, что я могу испускать IL вручную, но мне нужно точно преобразовать Expression
→ в MethodInfo
, привязанный к определенному TypeBuilder
, вместо того, чтобы строить себя DynamicMethod
на нем.