Здравствуйте. У меня следующая проблема. Во время работы приложения необходимо подгружать плагины, которые в виде DLL-файлов лежат каждый в своей папке.
Я делаю так:
var plugIn = Assembly.Load(File.ReadAllBytes(fileName));
Если у сборки плагина нет никаких зависимостей (кроме mscorlib.dll), то сборка загружается нормально и все работает. Но если у сборки есть зависимости то генерируется исключение.
Невозможно загрузить файл или сборку "BlaBlaBla, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Не удается найти указанный файл.
Зависимости лежат в той же папке что и сама сборка плагина. Эта папка лежит в папке с EXE-шником приложения.
Если зависимости положить в саму папку приложения то плагин запускается.
Как при загрузке сборки указать откуда ей подгружать все зависимости?
Попробуй добавить в app.config:
<runtime>
<assemblyBinding xmlns="
urn:schemas-microsoft-com:asm.v1">
<probing privatePath="{Путь к либам}"/>
</assemblyBinding>
</runtime>
Здравствуйте, vbobyr, Вы писали:
V>Попробуй добавить в app.config:
V> <runtime>
V> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
V> <probing privatePath="{Путь к либам}"/>
V> </assemblyBinding>
V> </runtime>
Спасибо! Заработало. Теперь надо разобраться как это в коде зделать чтобы для каждогоплагина подставлять свой путь...
Здравствуйте, samius, Вы писали:
S>Это принципиально грузить сборку из массива байт? Если нет, то используйте метод Assembly.LoadFrom, он ресолвит зависимости. Если да — можно ресолвить самому. Для этого потребуется подписаться на событие AppDomain.AssemblyResolve
Спасибо. LoadFrom работает