Я реализовал систему плагинов в .NET. Базовая библиотека реализует базовые классы и интерфейсы, предоставляемые подключаемым модулям, библиотеки подключаемых модулей связывают базовую библиотеку для использования открытых классов и интерфейсов.
Проблема, с которой я столкнулся, заключается в том, что (простая) перекомпиляция базовой библиотеки (с модификациями или без них) приводит к тому, что плагины не могут быть загружены, выдавая сообщение об исключении:
"Could not load file or assembly 'BaseLibrary, Version=0.0.1.68, Culture=neutral, PublicKeyToken=7b445b12e635292c' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)"
Эта проблема решается путем компиляции сразу базовой библиотеки и библиотек плагинов, но это не очень удобно во время разработки, так как я довольно часто модифицирую базовую библиотеку на этом этапе.
Есть ли способ «расслабить» бинарное сопоставление?
Возможно ли, что информация о сборке базовой библиотеки (приведенная ниже) может быть причиной проблемы?
[assembly: AssemblyVersion("0.0.1.*")]
Забыл упомянуть, что сборки подписаны.
Сборки загружаются с использованием следующей процедуры
Assembly hLibrary = Assembly.LoadFile(pPath);
Type plugImageCodecFactoryType = hLibrary.GetType("Derm.ImageCodecPluginFactory", true, false);
object plugImageCodecFactory = Activator.CreateInstance(plugImageCodecFactoryType);
object plugInstance;
MethodInfo plugFactoryCreate = plugImageCodecFactoryType.GetMethod("CreatePlugin", BindingFlags.Instance|BindingFlags.Public);
plugInstance = plugFactoryCreate.Invoke(plugImageCodecFactory, null);
if (plugInstance is IImageCodecPlugin)
RegisterPlugin((IImageCodecPlugin)plugInstance);