前段時間寫的一個WinForm的.NET程式。因為引用了不少的函式庫文件,但是最近這些函式庫文件因為修正了一些Bug和演算法。但是主的程式文件沒有怎麼改動。所以就不像把這個主程式重新編譯了。於是就把所有的新版DLL檔拷貝到運行目錄下,希望主程式能夠直接呼叫新版的函式庫檔。結果發現原來這些函式庫檔案都用Strong Name簽了名的。主程式一呼叫就出錯,說找不到該版本的檔案。
後來查了一下MSDN,發現只要在config裡面加入runtime節點就可以了。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyAssembly"
publicKeyToken="2b7c3a3291de04"
culture="neutral" />
<bindingRedirect oldVersion="3.0.0.8"
newVersion="4.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
不過這有個前提條件就是這兩個DLL的PublicKeyToken是一樣的,就是需要用同一個sn檔簽章的才行。
當然如果你的函式庫檔案根本就沒有用Strong Name簽章的話,就不用考慮版本問題了。