Escenarios de ensamblado dinámico de emisión de la reflexión
La emisión de reflexión es compatible con la creación de módulos dinámicos definidos en ensamblados dinámicos. Un módulo dinámico creado en un ensamblado dinámico puede ser transitorio o con persistencia.
Restricciones en las referencias a tipos
Los ensamblados pueden hacer referencia a los tipos definidos en otro ensamblado. Un ensamblado dinámico transitorio puede hacer referencia sin problemas a los tipos definidos en otro ensamblado dinámico transitorio, en un ensamblado dinámico con persistencia o en un ensamblado estático. Sin embargo, Common Language Runtime no permite que un módulo dinámico con persistencia haga referencia a un tipo definido en un módulo dinámico transitorio. El motivo es que, cuando se carga el módulo dinámico con persistencia después de haberse guardado en el disco, el motor en tiempo de ejecución no puede resolver las referencias a los tipos definidos en el módulo dinámico transitorio.
Restricciones en la emisión a dominios de aplicación remotos
En algunos escenarios es necesario crear y ejecutar un ensamblado dinámico en un dominio de aplicación remoto. Reflection Emit no permite que se emitan ensamblados dinámicos directamente a un dominio de aplicación remoto. La solución es emitir el ensamblado dinámico en el dominio de aplicación actual, guardar el ensamblado dinámico emitido en el disco y después cargar el ensamblado dinámico en el dominio de aplicación remoto.
Modos de acceso de los ensamblados dinámicos
Los ensamblados dinámicos se pueden crear con uno de los siguientes modos de acceso:
Run
El ensamblado dinámico representado por un objeto AssemblyBuilder es transitorio. El ensamblado dinámico sólo se puede utilizar para ejecutar el código emitido.
Guardar
El ensamblado dinámico representado por un objeto AssemblyBuilder puede persistir, pero no se puede ejecutar hasta que se haya cargado desde el disco el archivo ejecutable portable (PE) guardado.
RunAndSave
El ensamblado dinámico representado por un objeto AssemblyBuilder puede persistir, pero también se puede ejecutar antes o después de guardar el ensamblado en el disco.
El modo de acceso se debe especificar cuando se define el ensamblado dinámico y después no se puede cambiar. El motor en tiempo de ejecución utiliza el modo de acceso de un ensamblado dinámico para optimizar la representación interna del ensamblado.