仅在目录中加载托管程序集DLL

And*_*vey 5 .net asp.net

我需要从目录中的DLL加载所有程序集.

我的基本代码是:

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

但是,如果该目录中存在非托管DLL,则Assembly.LoadFrom将失败.有没有一种只加载托管DLL的好方法?捕获加载异常是一种选择,但我想知道是否有更好的方法.

我的代码在应用程序启动时在ASP.NET上运行.所以我也接受一个ASP.NET特定的解决方案.

Dan*_*ite 5

只需单独循环它们并将其Assembly.LoadFrom放入一个try...catch块中.


Tim*_*les 4

从这里: http: //blogs.msdn.com/b/junfeng/archive/2004/02/06/68334.aspx

“如果给定文件不是托管程序集,Assembly.LoadFrom 将抛出 BadImageFormatException。

此异常也可能因其他原因引发。苏珊娜好心地指出了一种更可靠的方法。捕获 BadImageFormatException 后,查看其 HResult 字段。如果 HResult 是 COR_E_ASSEMBLYEXPECTED,则意味着这不是托管程序集。”

这有帮助吗?