c# .net appdomain

c# - Cargando archivos DLL en un AppDomain separado



.net (5)

Como se indicó anteriormente, use AppDomain.CreateDomain para crear un nuevo dominio de aplicación. A continuación, puede cargar un ensamblaje utilizando el método Load o incluso ejecutar un ensamblaje con el método ExecuteAssembly. Puede usar GetAssemblies para ver si ya se ha cargado un ensamblaje. Tenga en cuenta también que no puede descargar un conjunto una vez que está cargado. Deberá descargar el dominio.

Quiero cargar una o más DLL de forma dinámica para que se ejecuten con una seguridad o un camino base diferente de mi aplicación principal. ¿Cómo puedo cargar estos archivos DLL en un dominio de aplicación independiente y crear una instancia de los objetos a partir de ellos?


Crea un nuevo dominio de aplicación con AppDomain.Create (...). Después de crear AppDomain, cargue las DLL en ese AppDomain.

Mire todos los métodos que Appdomain tiene con Create *. Hay ciertas cosas como CreateInstanceAndUnwrap, etc.


Más específicamente

AppDomain domain = AppDomain.CreateDomain("New domain name"); //Do other things to the domain like set the security policy string pathToDll = @"C:/myDll.dll"; //Full path to dll you want to load Type t = typeof(TypeIWantToLoad); TypeIWantToLoad myObject = (TypeIWantToLoad)domain.CreateInstanceFromAndUnwrap(pathToDll, t.FullName);

Si todo va bien (sin excepciones), ahora tiene una instancia de TypeIWantToLoad cargada en su nuevo dominio. La instancia que tiene es en realidad un proxy (ya que el objeto real está en el nuevo dominio) pero puede usarlo como su objeto normal.

Nota: Por lo que sé, TypeIWantToLoad tiene que heredar de MarshalByRefObject.


Puede usar el método AppDomain.CreateInstance para hacer esto. Tendrá que llamar al método Unwrap del ObjectHandle que se devuelve para obtener el objeto real.