項目中一直使用NPOI與memcached,一直相安無事,但是最近升級了npoi到最新版本,發生了ICSharpCode.SharpZipLib的版本沖突問題.
因為此前一直使用的是NPOI的1.x的版本,用的SharpZipLib是0.84版本,而升級到最新版本以后,SharpZipLib的版本變成了0.86版本.
但是memcached的卻沒有最新版本供使用,而只能使用0.84的版本.
那么問題就來了,該如何解決同一個dll不同版本的沖突問題呢?
目前可以在gitbub上獲取到最新版本的npoi的源碼,so我們把源碼down下來重新修改為0.84的版本就可以了啊.
想法是很好的,但是down下源碼編譯的時候,卻發現源碼里缺少文件導致編譯不成功.
so,文的不行,那就只能來武的啦.
拿出ILDSM反編譯出NPOI的il代碼,然后直接修改引用為0.84版本.
{ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. .ver 4:0:0:0 } .assembly extern System.Drawing { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: .ver 4:0:0:0 } .assembly extern System.Windows.Forms { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. .ver 4:0:0:0
} .assembly extern ICSharpCode.SharpZipLib { .publickeytoken = (1B 03 E6 AC F1 16 4F 73 ) // ......Os .ver 0:84:0:0 } .assembly extern mscorlib as mscorlib_6 { .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. .ver 2:0:0:0 } .assembly extern System.Configuration { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: .ver 4:0:0:0 } http://blog.csdn.net/a497785609/article/details/8662295
然后就很簡單啦,因為NPOI是強簽名過的文件,我們需要把源碼中的簽名文件
npoi.snk拿出,然后通過ilasm反編譯為dll即可.
同樣還需要修改的文件為NPOI.OpenXml4Net.dll.
此處,考慮到大家在項目中同時使用這2個第三方庫的會有很多,提供下我已經修改好的dll給大家下載使用.
另外一種解決方案:
http://blog.csdn.net/lilong_herry/article/details/43059643