.net 仅加载目录中的托管程序集DLL

.net 仅加载目录中的托管程序集DLL,.net,asp.net,.net,Asp.net,我需要从一个目录中的DLL加载所有程序集 我的基本代码是: var assemblies = from filename in Directory.GetFiles(HttpRuntime.BinDirectory, "*.dll") select Assembly.LoadFrom(filename); 但是,如果该目录中存在非托管DLL,则Assembly.LoadFrom将失败。是否有一种只加载托管DLL的好方法?捕获负载异常是一种选择,但我想知道是否有

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

我的基本代码是:

var assemblies = from filename in Directory.GetFiles(HttpRuntime.BinDirectory, "*.dll")
                 select Assembly.LoadFrom(filename);
但是,如果该目录中存在非托管DLL,则Assembly.LoadFrom将失败。是否有一种只加载托管DLL的好方法?捕获负载异常是一种选择,但我想知道是否有更好的方法


我的代码在应用程序启动时在ASP.NET上运行。因此,我也将接受ASP.NET特定的解决方案。

只需分别循环它们,并将
程序集.LoadFrom
放在
try…catch
块中。

从这里开始:

“如果给定文件不是托管程序集,则Assembly.LoadFrom将引发BadImageFormatException

此异常也可能由于其他原因引发。Suzanne善意地指出了一种更为健壮的方法。一旦捕获到BadImageFormatException,请查看其HResult字段。如果HResult是COR_E_ASSEMBLYEXPECTED,则表示这不是托管程序集。”


这有用吗?

调用,如果它抛出一个BadImageFormatException,那么它不是程序集。

一些谷歌搜索将我引导到这个页面:。听起来这很合适


这实际上取决于您期望的非托管DLL数量以及您对启动时间的敏感程度(我假设您在启动时就这样做了)。如果您可以在这两个帐户上都放松,那么
try…catch肯定是最简单的操作,否则,读取程序集标题信息的速度应该快几个数量级。

您必须使用bin吗?能否从另一个仅包含托管dll的目录加载?是的,它必须是此项目的asp.net“bin”目录。谢谢,这至少意味着我可以非常准确地确定何时忽略加载异常。基本上,我想避免因为任何其他原因而发生的负载异常。非常酷!但我将继续捕获BadImageFormatException并检查HResult,因为我不希望非托管DLL在大多数情况下出现:)