2011-08-31 12 views
5

Necesito cargar todos los ensamblajes de las DLL en un directorio.Solo cargue las DLL del ensamblado administrado en el directorio

Mi código básico es:

var assemblies = from filename in Directory.GetFiles(HttpRuntime.BinDirectory, "*.dll") 
       select Assembly.LoadFrom(filename); 

Sin embargo, si hay archivos DLL no administrados en ese directorio a continuación Assembly.LoadFrom falla. ¿Hay una buena manera de cargar solo los archivos DLL administrados? Capturar la excepción de carga es una opción, pero me gustaría saber si hay una mejor manera.

Mi código se ejecuta en ASP.NET, al inicio de la aplicación. Entonces también aceptaré una solución específica de ASP.NET.

+0

¿Tienes que usar bin? ¿Podrías cargar desde otro directorio que solo contenga dll administrados? – sestocker

+0

Sí, tiene que ser el directorio asp.net 'bin' para este proyecto. –

Respuesta

4

desde aquí:.. http://blogs.msdn.com/b/junfeng/archive/2004/02/06/68334.aspx

"Assembly.LoadFrom lanzará BadImageFormatException si el archivo dado no es un ensamblado administrado

Esta excepción, pueden salir proyectados por otra razón, así Suzanne amablemente señala una mayor Una vez que atrape BadImageFormatException, mire su campo HResult. Si HResult es COR_E_ASSEMBLYEXPECTED, significa que este no es un ensamblado administrado. "

¿Eso ayuda?

+0

Gracias, al menos eso significa que puedo ser muy exacto sobre cuándo ignorar la excepción de carga. Básicamente quiero evitar las excepciones de carga que se producen por cualquier otro motivo. –

+0

Esto se ve bien entonces - ¡no lo he probado yo mismo, mente! –

5

Solo buclee a través de ellos por separado y ponga el Assembly.LoadFrom en un bloque try...catch.

+0

Haga lo más simple que pueda funcionar ... –

3

Algunos google me llevaron a esta página: Detect if an assembly is a managed assembly. Parece que esto sería un buen calce.

Realmente depende de cuántos dlls no gestionados esperas y qué tan sensible eres acerca de tu tiempo de inicio (supongo que estás haciendo esto al inicio). Si puede relajarse en ambas cuentas, try...catch seguramente es lo más simple que puede hacer, de lo contrario, leer la información del encabezado del ensamblado debería ser de órdenes de magnitud más rápidas.

+0

¡Muy bueno! Pero voy a ir con la captura de la BadImageFormatException y comprobando el HResult ya que no espero que los archivos DLL no administrados estén ahí la mayor parte del tiempo :) –

Cuestiones relacionadas