有没有一种方法可以从IL代码中“反射”出ILGenerator.Emit命令?

4

我正在尝试动态发出一些我在C#中原型化的通用方法。根据ILDASM中呈现的IL代码,是否有一种方法可以生成足够的ILGenerator.Emit()命令序列,最终可以编译成相同的IL?

感谢您的帮助!


你想将ILDASM中IL的字符串表示转换为实际的IL吗? - svick
不行 - 我想要得到这样的东西: // 生成 IL ILGenerator ilGenerator = getterMethodBuilder.GetILGenerator(); ilGenerator.DeclareLocal(fieldBuilder.FieldType); ilGenerator.Emit(OpCodes.Nop); ilGenerator.EmitCall(OpCodes.Callvirt, getterMethodInfo, null); . . . . ilGenerator.Emit(OpCodes.Ret); - vabram
2个回答

1

顺便说一句:我倾向于手动完成这项工作,但我看到了一个 .NET Reflector 插件,听起来它可以做你想要的事情:ReflectionEmitLanguage。我一直很好奇它会做什么,但我实际上还没有尝试过。


嗯,它确实生成了Emit代码,但有一些错误。例如,它使用了被禁止的名称CS$0$0000;它使用gen.Emit(OpCodes.Box,T)而不是gen.Emit(OpCodes.Box,typeof(T))等等。然而,它确实涵盖了大部分令人沮丧的琐碎问题,这种方式非常有帮助。谢谢! - vabram

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接