Mono-Cecil:我如何获得mscorlib的ModuleDefinition?

the*_*oop 10 .net mono.cecil

我正在尝试编写调用mscorlib中的方法的IL,但我无法弄清楚如何让ModuleDefinitionmscorlib实际引用类型和方法,而文档和谷歌缺乏.

Jb *_*ain 9

获取mscorlib的ModuleDefinition非常简单.这是一个简单的方法:

ModuleDefinition corlib = ModuleDefinition.ReadModule (typeof (object).Module.FullyQualifiedName);
Run Code Online (Sandbox Code Playgroud)

但是如果你注入了在mscorlib中调用方法的代码,你不一定要自己加载模块.例如:

MethodDefinition method = ...;
ILProcessor il = method.Body.GetILProcessor ();

Instruction call_writeline = il.Create (
    OpCodes.Call, 
    method.Module.Import (typeof (Console).GetMethod ("WriteLine", Type.EmptyTypes)));
Run Code Online (Sandbox Code Playgroud)

创建一个调用Console.WriteLine()的指令;

至于文档,请阅读维基上的导入页面.

  • Excellect,谢谢!我没有意识到你也可以使用.NET反射对象.Cecil文档很难得到:/ (2认同)
  • 请记住,此代码将从mscorlib导入执行程序集的.NET版本的方法.因此,如果您打开.NET 2.0程序集并通过在.NET 4.0下运行上面的代码来修改它,修改后的程序集将引用2.0和4.0 mscorlib,这可能不是预期的. (2认同)