Un AppDomain básicamente proporciona una región aislada en la que el código se ejecuta dentro de un proceso.
Una forma fácil de pensar en ello es casi como un proceso más liviano dentro de su proceso principal. Cada AppDomain existe dentro de un proceso en completo aislamiento, lo que le permite ejecutar el código de forma segura (se puede descargar sin destruir todo el proceso si es necesario), con seguridad separada, etc.
En cuanto a sus detalles, si ejecuta código en 2 AppDomains diferentes dentro de un proceso, el código se ejecutará de forma aislada. Cualquier comunicación entre AppDomains se serializará o se manejará a través de MarshallByRefObject. Se comporta de manera muy similar a usar la comunicación remota a este respecto. Esto proporciona una gran cantidad de seguridad: puede ejecutar código en el que no confía y, si hace algo mal, no lo afectará.
Hay muchos más detalles en la descripción de dominios de aplicación de MSDN .