Вы хотите что-то вроде следующего:
foreach (string filePath in Directory.GetFiles(path, "*.DLL"))
{
try
{
_assemblies.Add(Assembly.LoadFile(filePath));
}
catch (FileNotFoundException)
{
// Attempted to load something with a missing dependency - ignore.
}
catch (BadImageFormatException)
{
// Attempted to load unmanaged assembly - ignore.
}
}
Вам по-прежнему необходимо убедиться, что ваши зависимые объекты управляются или являются доступными, и не загружать собственные библиотеки DLL случайно. Для управляемых сборок может потребоваться изменить путь зондирования .net в app.config, чтобы убедиться, что они найдены:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="modules"/>
</assemblyBinding>
</runtime>
В идеале вы хотите поместить свои плагины в отдельный каталог, так как вызов LoadFile для многих сборок, которые вас не интересуют, является медленным, и как только вы загрузили сборку в домен приложений, вы не сможете ее выгрузить.