En la versión más reciente de .NET framework, versión 4.5, la clase MethodBuilder tiene un método llamado SetMethodBody
que creo que es exactamente lo que estoy viendo como una alternativa al uso de ILGenerator (que es molesto y limitado de maneras extrañas). La documentación se puede encontrar en here, aunque debido a que .NET 4.5 aún no ha salido, no está completamente documentada. Puedo proporcionar todos menos dos de los argumentos, pero el resto necesitaré ayuda..NET 4.5 MethodBuilder.SetMethodBody
Lo primero que no entiendo es byte[] localSignature
, el tercer argumento. MSDN afirma que es "Una matriz de bytes que contiene la estructura de variable local serializada. Especifique nulo si el método no tiene variables locales". El problema es que eso es todo lo que dice, y no puedo encontrar el formato de una "firma de variable local serializada". He intentado buscar en la especificación ECMA-335, pero todo lo que he encontrado es cómo especificar las variables locales en CIL sin ensamblar. Si alguien pudiera ayudarme a resolver esto, sería muy apreciado.
Además, el último argumento es IEnumerable<int> tokenFixups
, que es "Una colección de valores que representan desplazamientos en il, cada uno de los cuales especifica el comienzo de un token que se puede modificar. Especifique nulo si el método no tiene tokens que deben ser modificado.". Sospecho que no necesitaré usar estos, pero me gustaría saber cuáles son de todos modos.
Gracias, Brandon
Necesitará la clase SignatureHelper. Las reparaciones solo son para compiladores que traducen código nativo a IL, como C++/CLI. –
@ Hans Passant: ¡gracias por la respuesta! :) – aboveyou00