У меня есть программа, которая должна обнаруживать подключаемые библиотеки 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 (например, msvcm80.dll), я получаю неуловимую ошибку времени выполнения R6034: «Приложение попыталось загрузить библиотеку времени выполнения C неправильно». Это окно блокирует выполнение программы. Я не хочу эту DLL (очевидно); есть ли способ вытащить изящную ошибку из этой ситуации?
[Относительно q: существует ли эффективный (например, не исключение) способ определения, является ли DLL сборкой .NET или нет, если эта DLL в настоящее время не загружена в пространство процесса?]