Pregunta

Quiero añadir un comportamiento a una determinada clase en tiempo de ejecución. Sé cómo subclase en tiempo de ejecución utilizando Reflection.Emit pero eso no es suficiente, dependiendo de algunas configuración externa que necesito para inyectar códigos de operación de un método en un tipo T por lo que todas las clases que heredan de forma automática le sirve a este comportamiento. (No puedo utilizar el .NET Profiling API)

Can algo como esto puede hacer con Mono.Cecil?

Si tampoco es posible modificar el código en un bien cargado de montaje, que es si puedo hacer las modificaciones antes de que se carga el montaje y luego cargar el ensamblado modificados en la memoria, pero no sé cómo puedo controlar conjunto de carga.

¿Fue útil?

Solución

No, Cecil no puede modificar un conjunto cargado. Tienes que los conjuntos de instrumentos antes de que se carguen.

Usted no tiene mucho control sobre cómo se resuelven las asambleas. Se puede enganchar en AppDomain.AssemblyResolve si oculta las asambleas en una carpeta privada de los suyos, e instrumento a continuación, antes de cargarlos.

Otros consejos

Como JB dice anteriormente Puede crear un controlador de eventos Resolve - que sería como PSeudoHooking. Y antes de la asamblea se carga, de realizar los cambios, y luego una vez que los cambios se hagan, la Asamblea Resolver luego continúa para cargar el ensamblado cambiado.

Me utilizar este método para resolver Embedded DLL de Flujos de memoria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top