我在.NET中實現了一個插件系統。基礎庫實現了基本的類和接口公開給插件,插件庫鏈接基礎庫使用暴露的類和接口。C#插件系統二進制兼容性問題
我現在面臨的問題是,基部庫(有或沒有修飾)的(簡單)重新編譯使插件不能夠被裝載,使異常消息:
"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);
是的,修復版本修改爲68(而不是默認的*),即使在基本庫重新編譯的情況下,插件也被正確加載並正常運行。那麼,如何忽略插件加載版本?我只想在主版本和次版本上標記二進制更改。 – Luca
只留下0,那是什麼問題? – Tigran
版本修訂版標識源/二進制版本。版本更改需要每個插件重新編譯(並且還要部署)。 – Luca