Uso de AppDomain en C #

¿Cuál es el uso más importante de AppDomains en C #?

El uso más importante es que su código tiene que tener uno , es decir, todo lo que escribe en C # se ejecuta en un AppDomain . Eso es bastante importante ;-p

Si te refieres a dominios de aplicaciones adicionales :

Al usar complementos y otro código que no es de confianza, le permite tanto el aislamiento como la capacidad de descargarlos (no puede descargar ensamblajes, solo dominios de aplicación completos).

Lo estoy usando actualmente para cargar dlls generados dinámicamente, para poder descargarlos.

También le permiten configurar diferentes archivos de configuración, niveles de confianza, etc., pero tienen costos asociados de complejidad y comunicación remota.

MSDN tiene una sección sobre dominios de aplicaciones, aquí .

No puedo decirte cuál es el uso más importante, ya que eso depende de la situación.

Los AppDomains son útiles para sandboxing partes de su aplicación. Puede cargar extensiones en un AppDomain y descargarlas de nuevo, algo que no puede hacer de otra manera. Puede asignar derechos específicos a AppDomains. Por objetos predeterminados en diferentes AppDomains no pueden accederse entre sí.

Los AppDomains se pueden ver como procesos livianos ya que le brindan muchas de las mismas funciones. Sin embargo, a diferencia de un proceso, los nuevos AppDomains no tienen su propio hilo por defecto. Debe administrar AppDomains y threads usted mismo.

Además, AppDomains todos comparten el mismo montón administrado. Por lo general, esto no es un problema, pero puede tener efectos sorprendentes ya que algunos casos, como las cadenas, se comparten entre los AppDomains. Para un uso regular, esto no es un problema, pero si utiliza cadenas para el locking, los hilos en diferentes dominios de aplicación pueden afectarse entre sí.

En general, no es una práctica de encoding tan diaria el uso de AppDomains, esto podría considerarse algo como un concepto avanzado … pero, a partir de esto, es importante comprender mejor los conceptos detrás de la palabra “AppDomain”.

En términos de architecture, y tomando lo más simple posible, un AppDomain es un contenedor de aislamiento incluso en términos de direccionamiento de memoria, dentro de él se cargan y ejecutan todos los ensambles necesarios para una aplicación, incluso si este concepto es más complicado de explicar en detalle (Espero que no se trata de tu pregunta para ir más profundo).

A partir de allí, la clase AppDomain se usa en primer lugar para obtener acceso al dominio de la aplicación de ejecución relacionada con la aplicación, esto podría hacerse a través de la implementación de la propiedad Singleton AppDomain.CurrentDomain . De esta forma es posible:

  1. obtener acceso a los ensamblajes cargados;
  2. obtener acceso a las ranuras de datos compartidos por dominio de aplicación;
  3. clasificación interna, en términos de desenvolver instancias creadas desde ensamblajes cargados en dominios creados.

Entonces, la clase AppDomain se usa para:

  1. crear más “dominios” en el mismo proceso;
  2. ejecutar ensambles en el proceso;
  3. Administrar el proceso de carga / descarga del appdomain.

Podría ser útil tener una vista del código del nuevo marco de Microsoft (aún no publicado) MEF (Managed Extesibility Framework) que está verdaderamente basado en conceptos como creaciones y descargas de AppDomains, ensamblados dinámicamente cargados.

Como un simple ejemplo de cosas y ejemplos de lo que puedes hacer con AppDomains, puedo compartir este enlace .

Espero haber respondido tu pregunta

AC # AppDomain es un contenedor lógicamente aislado dentro del cual se ejecuta el código .NET. Cuando ejecuta cualquier código .NET siempre se ejecuta en un dominio de aplicación predeterminado.

Mire este video de 30 minutos de Youtube ¿Qué es C # AppDomain? que explica AppDomain en más detalle.

C # Appdomain

Pero déjame intentar explicarlo con más detalle. Digamos que obtienes una DLL de terceros y quieres usarla en tu aplicación. Pero también duda de que el tercero pueda tener algún código malicioso, por lo que le gustaría ejecutar el DLL de terceros en un entorno restringido. Al igual que no desea que el tercero acceda a su unidad c: o elimine archivos, etc.

Entonces puede crear dos AppDomains uno que sea para el tercero y otro para sus propias clases de C #. Para el dominio de aplicación de terceros, aplicará la restricción de seguridad de que no puede acceder a c: unidad y para sus DLL de C # tendrá un dominio de aplicación no restringido.

Por favor, lea mi blog para la aplicación estándar de carga en tiempo de ejecución de DLL y comunicación cruzada usando AppDomain. https://blog.vcillusion.co.in/sending-events-through-application-domain-boundary/

  1. Tiempo de ejecución Carga y descarga de archivos DLL : trabajé en un proyecto en el que el usuario carga las DLL en tiempo de ejecución, y durante la ejecución del progtwig, los métodos se ejecutan usando Reflection y se descargan durante la ejecución del progtwig.
  2. Protección de mi progtwig de ejecución principal : estamos cargando el archivo DLL de forma dinámica, por lo que cualquier excepción que ocurra en esa DLL cargada dinámicamente no afectará a mi AppDomain principal. En el caso de escenarios de corrupción, tenemos la opción de descargar de manera eficiente y cargar nuevamente el archivo DLL.
  3. Comunicación entre dominios de aplicaciones cruzadas : podemos cargar dinámicamente dos DLL en tiempo de ejecución en diferentes dominios de aplicaciones y hacer que se comuniquen entre sí.