アセンブリバインディングリダイレクト:どのように、そしてなぜ?
これは問題の質問ではなく、アセンブリバインディングのredirect'の動作に関する一般的な理解のための質問です。
**クエリ
1.なぜバインディングリダイレクトはメジャーバージョンだけを表示し、マイナー、ビルド、リビジョン番号を表示しないのでしょうか? 2.メジャーバージョンに変更があった場合のみ、旧バージョンと新バージョンが変わるのでしょうか?
<dependentAssembly>
<assemblyIdentity name="FooBar"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
102
2
なぜバインディングリダイレクトが必要なのか?例えば、アプリケーションAがライブラリBとバージョン1.1.2.5のライブラリCを参照しているとします。一方、ライブラリBもライブラリCを参照していますが、そのバージョンは1.1.1.0です。同じアセンブリの異なるバージョンを実行時にロードすることはできないので、ここで衝突が発生します。この衝突を解決するために、バインディング・リダイレクトを使用することがあります。アプリケーションAのapp.configファイルの、
configuration > runtime > assemblyBinding
セクションに以下を追加します(完全な設定ファイルの例は、こちらを参照してください)。また、マッピングするバージョンの範囲を指定することも可能です。
これで、バージョン 1.1.1.0 の C を参照してコンパイルされたライブラリ B は、実行時にバージョン 1.1.2.5 の C を使用するようになります。もちろん、ライブラリCが後方互換性を持っていることを確認した方が良い。そうしないと、予期せぬ結果を招くかもしれない。
メジャーなライブラリだけでなく、あらゆるバージョンのライブラリをリダイレクトすることができます。
NewtonSoft.Jsonのバインディングリダイレクトに問題が発生しました。Win10のファイルプロパティでファイルのバージョンを調べ、9.0.1.19813"と番号を調べると、リダイレクトは失敗し続けました。さらに調査したところ、アセンブリのバージョンではなく、ファイルのバージョンを見ていることがわかりました。ということは、File Version(頻繁に変更される)とAssembly Version(windows10のFile Explorerでは見れない)を勘違いしている人が多いのかなと思います。 dllのAssembly Versionを確認するには、powershellで次のように実行します。**dll名をバージョン検索したいものに置き換えてください。
上記の結果は
参考文献:を参照
https://stackoverflow.com/questions/4147164/how-can-i-see-the-assembly-version-of-a-net-assembly-in-windows-vista-and-newer
https://support.microsoft.com/en-nz/help/556041
ここに画像の説明を入力1。