2009-08-04 11 views
6

Duplicar posibles:
Loading DLLs into a separate AppDomainC# - Cargando ensamblado .NET en dominio de aplicación independiente para que pueda descargarlo

¿Cuál es la forma correcta de cargar un ensamblado de .NET en un dominio de aplicación separada para que pueda tener acceso a sus Tipos/Clases pero aún así pueda descargarlo (y volver a cargarlo).

Esta es una tangente de esta discusión anterior: C# - Correct Way to Load Assembly, Find Class and Call Run() Method

Respuesta

3

Básicamente, que acaba de crear el nuevo dominio de aplicación, y luego llamar a AppDomain.CreateInstanceAndUnwrap para crear el tipo. Aquí hay un simple CodeProject article sobre este proceso.

Aquí hay algunos trucos. Nunca se puede referir directamente al Tipo (esto cargará el tipo en su Dominio de Aplicación actual), y todos los objetos deben derivar de MarshallByRefObj. Esto le permitirá usar el objeto "de forma remota", es decir, evitar que se cargue en su AppDomain.

+0

+1 gracias. ¿Qué tan grave es la penalización de rendimiento cada vez que cruzas AppDomains? – BuddyJoe

+1

Depende. Todo lo que pasa entre los dominios de aplicaciones está básicamente serializado. (Funciona de manera muy similar a Remoting.) En general, si todos sus tipos se derivan de MarshallByRefObj, solo serializarán un "identificador", por lo que es bastante rápido. Cuando lea los datos, los datos se serializarán, lo que puede ralentizar un poco las cosas. Trate de mantener siempre tanto "interno" en el segundo dominio de aplicación, y probablemente no sea un problema. –

+0

Tenga en cuenta también que el tiempo de vida de la instancia remota es limitado. Dependiendo de la versión de .Net, debe usar WCF en lugar de comunicación remota. – Guillaume

Cuestiones relacionadas