Cargar y ejecutar código de usuario
El motivo para implementar un host es configurar un entorno de aplicación donde se va a ejecutar el código de usuario administrado. En este contexto, código de usuario significa cualquier código administrado que no forma parte del host específicamente. Por ejemplo, para el host de Internet Explorer, código de usuario son los controles y el script administrados que forman parte de las páginas HTML. Para un host de servidor de aplicaciones, código de usuario es el código que contiene las reglas empresariales de una organización que el servidor de aplicaciones administra y ejecuta.
Todo el código administrado forma parte de una clase Assembly. Como resultado, los métodos disponibles para cargar y ejecutar código administrado se basan en ensamblados. Por ejemplo, las clases System.AppDomainy System.Reflection.Assembly contienen métodos que habilitan a un host para cargar un ensamblado. Los métodos Load tienen diferentes formas: algunos toman el nombre de un ensamblado, otros la ruta de acceso completa del archivo que contiene el manifiesto del ensamblado, etc. Estos métodos se utilizan para cargar ensamblados que se crearon previamente y se guardaron en el disco.
Por ejemplo, supongamos que el host de servidor de aplicaciones descrito permite a los usuarios cargar las reglas empresariales de código administrado en el proceso del servidor de aplicaciones y ejecutarlas. Cuando una solicitud para ejecutar un método en una regla empresarial determinada llega al servidor de aplicaciones, el código de hospedaje de Common Language Runtime del servidor determina en qué dominio se va a ejecutar el código, o si se debe crear un dominio nuevo. A continuación, el código de hospedaje de Common Language Runtime utiliza uno de los métodos Load del ensamblado para cargar el ensamblado que contiene la regla empresarial y utiliza la reflexión para ejecutar un método en esa regla empresarial. Para obtener más información, consulte la documentación sobre el espacio de nombres System.Reflection.
El espacio de nombres System.Reflection.Emit también dispone de tipos para crear ensamblados dinámicamente. Cargar ensamblados de esta manera resulta útil si la aplicación está procesando código de script.
Por ejemplo, un programa de procesamiento de texto podría admitir un lenguaje de macros con el que los usuarios pueden personalizar el comportamiento de la aplicación. Después de cargar el motor en tiempo de ejecución y crear un dominio de aplicación, el programa de procesamiento de texto puede compilar los scripts de la macro como código administrado y crear un ensamblado mediante System.Reflection.Emit. A continuación, el ensamblado creado se puede cargar en el dominio de aplicación y ejecutarse. Según el caso concreto, el ensamblado podría existir sólo mientras dure la aplicación, es decir, nunca se guardaría en disco.