【发布时间】:2011-02-17 21:41:29
【问题描述】:
我有一个程序需要在其主机上发现插件 DLL。
它通过枚举(相当大的)路径中的所有 DLL 来做到这一点。这条路径包含很多东西,包括原生 DLL。
foreach (var f in Directory.EnumerateFiles(@"c:\Program Files", "*.dll", SearchOption.AllDirectories))
{
try
{
var assembly = Assembly.LoadFile(f);
var types = assembly.GetTypes();
foreach (var type in types)
{
if (type.GetInterface("My.IInterface") != null)
{
plugins.Add(f);
break;
}
}
assembly = null;
}
catch (Exception e)
{
}
}
如果我的扫描程序遇到 MS 运行时 DLL(例如 msvcm80.dll),我会收到无法捕获的运行时错误 R6034:“应用程序尝试错误地加载 C 运行时库。”此窗口阻止程序的执行。我不想要这个 DLL(显然);有什么方法可以从这种情况中得到一个优雅的错误吗?
[相关问题:如果该 DLL 当前未加载到进程空间中,是否有一种有效的(例如非异常)方法来确定 DLL 是否为 .NET 程序集?]
【问题讨论】:
标签: c# .net reflection assemblies