2010-07-07 7 views

Respuesta

8

Obtención de un ModuleDefinition para mscorlib es bastante fácil. Aquí está una manera simple:

ModuleDefinition corlib = ModuleDefinition.ReadModule (typeof (object).Module.FullyQualifiedName); 

Pero si se inyecta código que está llamando a métodos en el mscorlib, que no necesariamente tiene que cargar el módulo mismo. Por ejemplo:

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

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

Crea una instrucción para llamar a Console.WriteLine();

En cuanto a la documentación, lea la página importing en la wiki.

+2

¡Excelente, gracias! No me di cuenta de que también podías usar objetos de reflexión .NET. La documentación de Cecil es bastante difícil de conseguir:/ – thecoop

+1

Tenga en cuenta que este código importará el método de la mscorlib para la versión .NET del ensamblaje en ejecución. Por lo tanto, si abre un ensamblado .NET 2.0 y lo modifica ejecutando el código anterior bajo .NET 4.0, el ensamblado modificado tendrá referencias tanto al 2.0 como al 4.0 mscorlib, que probablemente no es lo que se pretendía. –

Cuestiones relacionadas