Mono-Cecil:我如何获得mscorlib的ModuleDefinition?
问题描述:
我正在尝试编写调用mscorlib中的方法的IL,但我无法弄清楚如何获得ModuleDefinition
以便mscorlib实际引用&类型的方法,并且缺少文档&。Mono-Cecil:我如何获得mscorlib的ModuleDefinition?
答
获取mscorlib的ModuleDefinition非常简单。这里有一个简单的方法:
ModuleDefinition corlib = ModuleDefinition.ReadModule (typeof (object).Module.FullyQualifiedName);
但是,如果你注入正在调用的方法mscorlib程序代码,你不一定需要自己加载模块。例如:
MethodDefinition method = ...;
ILProcessor il = method.Body.GetILProcessor();
Instruction call_writeline = il.Create (
OpCodes.Call,
method.Module.Import (typeof (Console).GetMethod ("WriteLine", Type.EmptyTypes)));
创建调用Console.WriteLine()的指令;
至于文档,请阅读wiki上的importing页面。
Excellect,谢谢!我没有意识到你也可以使用.NET反射对象。 Cecil文档很难得到:/ – thecoop 2010-07-07 15:06:35
请记住,此代码将从执行程序集的.NET版本的mscorlib中导入该方法。因此,如果打开.NET 2.0程序集并通过在.NET 4.0下运行上述代码对其进行修改,则修改后的程序集将引用2.0和4.0 mscorlib,这可能不是预期的。 – 2013-07-28 23:02:08