Я теперь портировании некоторых библиотек, которая использует выражения .Net Core
приложения и столкнулся с проблемой, что вся моя логика основана на LambdaExpression.CompileToMethod
, которая просто отсутствует в Вот примере код:Альтернативы CompileToMethod в .Net Standard
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 : Unable to import a global method or field from a different module.
Я знаю, что я могу излучать IL вручную, но мне нужно точно конвертировать Expression
-> к MethodInfo
привязана к какому конкретному TypeBuilder
вместо построив себя DynamicMethod
на нем.
Wow, пытаясь ответить на этот вопрос, я только выяснил, что .Net-core не имеет документации и не может легко найти, что было заменено тем, что ... Удачи в этом порту ... –
@LucasCorsaletti Я думаю, что очень сложно предоставить такую документацию, потому что я думаю, что даже основная команда .net не знает, что было заменено тем, что :) В любом случае, спасибо за попытку –
Интересно, я смотрю этот вопрос. Просто попытался создать методы класса/экземпляра с помощью Linq.Expressions и старого .NET 4.5. Динамические методы могут быть созданы как методы экземпляра в отношении атрибутов видимости, но требуются Reflection.Emit. Построение его с помощью Linq.Expressions было гораздо более читаемым, но его нельзя было использовать в качестве метода экземпляра.Тем не менее, я мог бесстыдно обращаться к внутренним и частным лицам, делая такую же функциональность возможной, как и с помощью метода экземпляра. Я просто начинающий с генерации кода времени выполнения ... –