Referencia de la aplicación ASP.NET al ensamblado en ensamblado cargado mediante programación

StackOverflow https://stackoverflow.com/questions/804267

  •  03-07-2019
  •  | 
  •  

Pregunta

Mi aplicación ASP.NET carga un ensamblado y crea una instancia de clase a partir de un objeto dentro de él. El ensamblado en sí tiene una referencia a un dll llamado & Quot; Aspose.Cells.dll & Quot; al que puede acceder sin ningún problema y se encuentra en la misma ruta que el archivo de ensamblaje. Sin embargo, cuando realizo una llamada a un método, recibo este error:

  

No se pudo cargar el archivo o ensamblado 'Aspose.Cells, Version = 4.1.2.0, Culture = neutral, PublicKeyToken = 9a40d5a4b59e5256' o una de sus dependencias.

Supongo que necesito hacer que mi aplicación ASP.NET haga referencia a esta DLL también, pero todo lo que he intentado hasta ahora ha fallado. El archivo DLL de ensamblaje que se carga no se encuentra dentro de la raíz de la aplicación web y espero que no tenga que ser así.

Puedo cargar el ensamblaje de esta manera:

Assembly asm = Assembly.LoadFile(@"D:\Dev\EasyFlow\Plugins\ImportExportLibrary\bin\Debug\Aspose.Cells.dll");

Pero no puedo usarlo así:

AppDomain newDomain = AppDomain.CreateDomain("testAspose");
Assembly asm = newDomain.Load(System.IO.File.ReadAllBytes(@"D:\Dev\EasyFlow\Plugins\ImportExportLibrary\bin\Debug\Aspose.Cells.dll"));

¿Hay una mejor manera de hacerlo?

Actualización:

Gracias por sus respuestas.

Olvidé mencionar que no puedo copiar los ensamblajes a la carpeta bin o al GAC porque quiero que funcione como un sistema de complementos donde los ensamblajes se puedan reemplazar fácilmente cambiando la ruta a los ensamblajes en un archivo de configuración y sin tener que copiar manualmente archivos en el proyecto principal.

Sin embargo, el evento AssemblyResolve parece interesante y lo intentaré más tarde.

¿Fue útil?

Solución

Hay algunas formas de hacer esto. Una forma se describe en el artículo de Microsoft Knowledge Base " Cómo cargar un ensamblaje en tiempo de ejecución que se encuentra en una carpeta que no es la carpeta bin de la aplicación " ;. Proporciona un método bastante bueno paso a paso sobre cómo hacer esto.

Otros consejos

Puede copiar el ensamblaje dependiente en la carpeta Bin o instalarlo en el GAC.

Estoy pensando que puede agregar referencias de ensamblaje a web.config, en < compilation > sección, así:

<compilation debug="true">
  <assemblies>
     <add assembly="Aspose.Cells, Version=4.1.2.0, Culture=neutral,  PublicKeyToken=9a40d5a4b59e5256"/>
  </assemblies>
</compilation>

No estoy completamente seguro de que esto funcione, y puede requerir una entrada correspondiente a web.config en un < configSections > nodo bajo < configuración > ;.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top