派生クラスを作成するためのWindowsコントロールとベースタイプを含む、署名されていないサードパーティのアセンブリライブラリのペアを使用しています。dllは、アプリケーションがインストールされるサブフォルダーにあります。私の制御を超えて、同じ名前の新しいバージョンのライブラリが、新しいバージョンの.Netランタイムに対して構築され、実行可能ファイルと同じディレクトリにインストールされます。
これにより、アプリケーションは次のようにBadImageFormatExceptionをスローします。
ファイルまたはアセンブリを読み込めませんでした'sharedlibA'[...]このアセンブリは、現在読み込まれているランタイムよりも新しいランタイムによってビルドされているため、読み込むことができません。
これが私が扱っているファイルシステム構造です:
[MyappFolder]
|--Myapp.exe
|--sharedlibA.dll (wrong version)
|--sharedlibB.dll (wrong version)
|--bin
|--sharedlibA.dll (need to use this)
|--sharedlibB.dll (need to use this)
さまざまなアセンブリ読み込みコンテキストと個別のAppDomainの作成について読んでいますが、これらはどれも機能していないようです。
編集
Hansが以下に提案するように、構成ファイルからプローブ情報を削除し、AssemblyResolveイベントをサブスクライブしたため、sharedlibAとsharedlibBを除いて、他のすべての依存アセンブリがそのイベントをトリガーします。それでもBadImageFormatExceptionが発生します。変更にもかかわらず、AppBaseフォルダーはまだプローブされているようです。
フュージョンログは次のとおりです。
=== Pre-bind state information ===
LOG: User = ...
LOG: DisplayName = sharedlibA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=643d95c7ce242296
(Fully-specified)
LOG: Appbase = file:///C:/[MyappFolder]
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\[MyappFolder]\Myapp.exe.Config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: sharedlibA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=643d95c7ce242296
LOG: Attempting download of new URL file:///C:/[MyappFolder]/sharedlibA.DLL.
ERR: Failed to complete setup of assembly (hr = 0x8013101b). Probing terminated.
編集#2
私は自分の特定の問題を解決しました。以下に答えてください。