少し前に書いた WinForm .NET プログラム。多くのライブラリ ファイルを参照しているためですが、これらのライブラリ ファイルは最近いくつかのバグとアルゴリズムが修正されています。ただし、メインのプログラム ファイルはあまり変更されていません。したがって、メインプログラムを再コンパイルするようなものではありません。そのため、メイン プログラムが新しいバージョンのライブラリ ファイルを直接呼び出せることを期待して、すべての新しいバージョンの DLL ファイルが実行ディレクトリにコピーされました。これらのライブラリ ファイルは厳密な名前で署名されていることが判明しました。メインプログラムが呼び出されるとすぐに、このバージョンのファイルが見つからないというエラーが発生します。
後で MSDN を確認したところ、ランタイム ノードを構成に追加するだけで十分であることがわかりました。
<ランタイム>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<依存アセンブリ>
<assemblyIdentity name="MyAssembly"
publicKeyToken="2b7c3a3291de04"
文化 = "中立" />
<bindingRedirect oldVersion="3.0.0.8"
newVersion="4.1.0.0"/>
</依存アセンブリ>
</assemblyBinding>
ただし
、このための前提条件は、2 つの DLL の PublicKeyToken が同じであることです。つまり、同じ sn ファイルで署名する必要があります。
もちろん、ライブラリ ファイルが厳密な名前でまったく署名されていない場合は、バージョンの問題を考慮する必要はありません。