Pregunta Cargando archivos DLL en un AppDomain separado


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?


32
2017-09-17 23:36


origen


Respuestas:


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.


34
2017-09-18 14:29



Si se dirige a 3.5, puede aprovechar el nuevo marco de extensibilidad gestionado  para manejar todo el trabajo pesado por ti.


4
2017-09-17 23:50



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


2
2017-09-17 23:46



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.


0
2017-09-17 23:50



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.


0
2017-09-18 00:27