Un dominio de aplicación es un mecanismo (similar a un proceso en un sistema operativo ) utilizado dentro de la Infraestructura de lenguaje común (CLI) para aislar las aplicaciones de software ejecutadas entre sí de modo que no se afecten entre sí. Cada dominio de aplicación tiene su propio espacio de direcciones virtual que delimita los recursos para el dominio de aplicación que utiliza ese espacio de direcciones .
No es posible crear varios dominios de aplicación en el mismo proceso en .NET Core y .NET 5+. [1]
Un dominio de aplicación CLI está contenido dentro de un proceso del sistema operativo. Un proceso puede contener muchos dominios de aplicación. Los dominios de aplicación tienen propiedades de aislamiento similares a las de los procesos del sistema operativo:
En este sentido, una CLI es como un minisistema operativo: ejecuta un único proceso que contiene una serie de subprocesos o dominios de aplicación.
La ventaja de los dominios de aplicación es que ejecutar varios dominios de aplicación puede requerir menos recursos, como memoria, que ejecutar varios procesos del sistema operativo. La comunicación entre dominios aún requiere organización, por lo que los costos generales pueden ser más cercanos al uso de múltiples procesos que a la comunicación dentro de un solo dominio.
No se puede lograr una comunicación directa entre dominios de aplicación. Sin embargo, los dominios de aplicación aún pueden comunicarse entre sí al pasar objetos a través de la serialización por valor (objetos no vinculados) o la serialización por referencia a través de un proxy (objetos vinculados al dominio de aplicación). Existe un tercer tipo de objeto llamado objeto vinculado al contexto que se puede serializar por referencia entre dominios y también dentro del contexto de su propio dominio de aplicación. Debido a la seguridad de tipos verificable del código administrado , una CLI puede proporcionar aislamiento de fallas entre dominios a un costo mucho menor que el de un proceso de sistema operativo. La verificación de tipo estática utilizada para el aislamiento no requiere los mismos cambios de proceso o transiciones de anillo de hardware que requiere un proceso de sistema operativo.
Los dominios de aplicación son un concepto de código puramente administrado . Cualquier código nativo /no administrado incluido (por ejemplo, C++) en gran medida los desconoce. Las variables estáticas parecen compartirse entre dominios, las devoluciones de llamadas pueden ser problemáticas y cualquier error de corrupción de memoria en un dominio es probable que corrompa otros dominios.