2010-04-14 12 views
24

Como desarrollador .NET, la línea¿Qué es exactamente el 'Ensamblaje de DynamicMethods hospedado anónimamente' y cómo puedo hacerlo cargar manualmente?

'<process name>' (Managed): Loaded 'Anonymously Hosted DynamicMethods Assembly' 

probablemente es familiar para usted. Mi pregunta es simple y directa: ¿qué es exactamente este 'Ensamblaje de DynamicMethods alojado anónimamente' y puedo hacerlo (pre) cargar manualmente? ¿Si es así, cómo? ¿Se puede hacer esto a través de Assembly.Load (...)?

+1

¡No me es familiar! Pero acabo de verlo y me gustaría saber de qué se trata. –

Respuesta

27

System.Reflection.Emit contiene clases que le permiten crear código generado dinámicamente al emitir instrucciones IL. Las clases DynamicMethod y AssemblyBuilder son los caballos de batalla para hacerlo. Normalmente, IL se carga desde un ensamblaje, pero no hay ensamblaje cuando genera el IL dinámicamente. Sin embargo, se necesita un objeto de ensamblaje para actuar como contenedor del código IL y uno AppDomain.DefineDynamicAssembly() lo crea "falso". Eso es lo que ves en la notificación del depurador.

No puede usar Assembly.Load(), el conjunto se crea dinámicamente.

+0

Gracias por su respuesta. ¿Hay alguna manera de determinar cuándo se crea este objeto ensamblado creado dinámicamente? – dbaw

+0

La notificación del depurador es una buena pista. –

+0

Lo siento, quise decir 'determinar' como 'influencia', no 'identificar' :-) Entonces, ¿podría uno avanzar o retrasar la carga de objetos de ensamblaje dinámico? – dbaw

2

Esto es para DynamicMethods y por lo tanto va para expresiones también.

No puede cargarlo manualmente.

+5

Bueno, ¿por qué no? :-) – dbaw

0

Supongo que se trata de un conjunto emitido en tiempo de ejecución. Como no es necesario guardar el ensamblaje en el disco, puede que no sea posible cargarlo manualmente (en este caso, cuando el código termine de emitir el ensamblado, en la memoria, usará los tipos definidos directamente en el ensamblado) sin necesidad de cargarlo cualquier cosa)

Para obtener más información, consulte el documentation in msdn.

Mejor