Недавно у меня был проект с точно такой же проблемой.Вот как я решил это:
- создайте отдельный каталог для каждого модуля (плагина), внутри я помещаю основную библиотеку module.dll и каталог lib , куда я помещаю все зависимые от модуля библиотеки.
- в основное событие Form_Load положить
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(LoadModuleResolveEventHandler);
, где LoadModuleResolveEventHandler
равно:
private Assembly LoadModuleResolveEventHandler(object sender, ResolveEventArgs args)
{
if (pluginDirectory != null)
{
string path = Path.Combine(pluginDirectory , "lib");
if (Directory.Exists(path))
foreach (string file in Directory.GetFiles(path))
{
if (AssemblyName.GetAssemblyName(file).FullName == args.Name)
{
//Return the loaded assembly.
return Assembly.LoadFrom(file);
}
}
}
return null;
}
Приложение заставляет искать в pluginDirectory (гдемодуль плагина - это) / lib подкаталог, для которого есть ссылка на .dll, и вернуть его, если найденЯ сделал подобное в коде плагина, может быть, вам не нужно ... Вот и все.
Другая возможность - добавить в проект новый элемент: Файл конфигурации приложения и поместить следующий код:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="lib;lang" />
</assemblyBinding>
</runtime>
</configuration>
Создает файл application_name.exe.config, который необходимо развернуть с помощью mainФорма исполняемого файла и указывает дополнительные каталоги, где искать разрешение сборки.
Вы можете подать любое из этих решений и посмотреть, как они работают.
С уважением,
mj82