なぜバインドリダイレクトが必要なのですか?ライブラリーBを参照するアプリケーションAと、バージョン1.1.2.5のライブラリーCがあるとします。ライブラリーBは、ライブラリーCも参照しますが、バージョンは1.1.1.0です。実行時に同じアセンブリの異なるバージョンをロードできないため、ここで競合が発生します。この競合を解決するには、通常は新しいバージョンへのバインドリダイレクトを使用します(ただし、古いバージョンでも可能です)。これを行うには、configuration > runtime > assemblyBinding
セクションの下でアプリケーションAのapp.configファイルに以下を追加します(完全な構成ファイルの例については、こちらを参照してください)。
<dependentAssembly>
<assemblyIdentity name="C"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<bindingRedirect oldVersion="1.1.1.0" newVersion="1.1.2.5" />
</dependentAssembly>
マップするバージョンの範囲を指定することもできます。
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.2.5" />
バージョン1.1.1.0のCを参照してコンパイルされたライブラリBは、実行時にバージョン1.1.2.5のCを使用します。もちろん、ライブラリCに下位互換性があることを確認してください。そうしないと、予期しない結果が生じる可能性があります。
主要なライブラリだけでなく、任意のバージョンのライブラリをリダイレクトできます。
oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"