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