次のような構造で、アプリケーションのプライベートフォルダーに保存する必要がある同じアセンブリの複数のバージョンがあるシナリオがあります。
.\My.dll // latest version, say 1.1.3.0
.\v1.1.1\My.dll // version 1.1.1.0
.\v1.1.2\My.dll // version 1.1.2.0
私の問題は、.Netランタイムが古いバージョンのいずれかを要求されると、常に最新バージョンを検出し、ビルド番号の不一致が原因で失敗してから、より適切な一致をプローブしようとすることです。
アセンブリには強い名前が付けられており、app.configでこの構成を使用しています。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="My"
publicKeyToken="xxxxxxxx" culture="netural" />
<bindingRedirect oldVersion="1.0.0.0-1.1.1.0"
newVersion="1.1.1.0" />
<bindingRedirect oldVersion="1.1.3.0-1.1.65535.65535"
newVersion="1.1.3.0" />
<codeBase version="1.1.1.0" href="v1.1.1\My.dll" />
<codeBase version="1.1.2.0" href="v1.1.2\My.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
うまくいけば、私がここで見逃したことがあります。AppDomain.AssemblyResolveイベントをリッスンすることで、これをコードで解決できることはわかっていますが、純粋な構成ソリューションを確認したいと思います。
更新:それで、ケントが想定したタイプミスであるバグを見つけました。culture="netural"
である必要がありますculture="neutral"
。とはいえ、タイプミスがなければ、codeBase
各バージョンを指す要素を使用する場合、解決はうまく機能します。このシナリオでは、プロービング要素が機能していないようです。