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