我在.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);