NPOI與Crystal report 13.0關於ICSharpCode.SharpZipLib控件版本衝突的解決方法
公司原來的系統用了Crystal report 13.0,它關聯使用ICSharpCode.SharpZipLib.dll (壓縮控件)的版本為0.85.1.271;後來因需要新增加 NPOI2.3控件,它關聯使用了ICSharpCode.SharpZipLib.dll 的版本為 高版本0.86,導致Crystal report 不能正常使用。
即遇到了棘手的同一項目下兩個不同版本的同一控件。
解決方案:修改NPOI的source code, 將ICSharpCode.SharpZipLib.dll的版本降為0.85.1.271 一致。
步驟:
- 下載NPOI source code(https://github.com/nissl-lab/npoi/releases),因我們舊系統是用 .net framework 2.0 , 所以選擇的是 NPOI2.2版本,
- 打开 Source code , solution --> vs2010–> OOXML.sln
修改以下:
1)替換各項目中引用的 ICSharpCode.SharpZipLib.dll 為0.85版本
2)修改以下
namespace NPOI.OpenXml4Net.OPC
{
public enum CompressionOption : int
{
Fast = 1,//Deflater.BEST_SPEED,
Maximum =9,// Deflater.BEST_COMPRESSION,
Normal = -1,//Deflater.DEFAULT_COMPRESSION,
NotCompressed =0// Deflater.NO_COMPRESSION
}
}
3)修改以下:NPOI.OpenXml4Net.OPC.ZipPackage
將报错的代码行zos.UseZip64 = UseZip64.Off;注释 - 重新編譯生成 NPOI dll
將新生成 NPOI dll 引用到 系統中。