2026年4月17日 星期五

[研究]NPOI.2.7.6升級2.8.0 已知災情 ?

[研究]NPOI.2.7.6升級2.8.0 已知災情 ?

2026-04-17

ChatGPT

目前 NPOI 2.7.6 → 2.8.0 升級,確實有一些「實務上常見的災情」,但不算全面性災難,多半集中在 相依套件、授權提示、與舊專案相容性。我幫你整理「已知問題 + 你這種 ASP.NET WebForms(.NET 4.8)特別要注意的點」:

🔴 1. OSMF 授權提示

Build 時出現類似:OSMF license / notice

原因是 NPOI 2.8.0 開始納入:

  • Apache POI 新版本內容
  • 加入 Open Source Metadata / License 提示(OSMF 類)

👉 不是錯誤,是授權提醒(Warning/Message)

影響

  • 不影響執行
  • 但 CI/CD 或嚴格 Build 可能被當成問題

解法

  • ✔ 可忽略
  • ✔ 或調整 build log filter
  • ✔ 或固定用 2.7.6(企業常見)

🔴 2. .NET Framework 相容性問題(⚠️ WebForms 重點)

現象

  • 編譯 OK,但執行時錯誤
  • 常見:Could not load file or assembly ...

原因

2.8.0:

  • target 偏向 .NET Standard 2.0+
  • 舊 .NET Framework(4.6~4.8)可能:
    • binding redirect 不完整
    • 相依 DLL 沒帶齊

高風險相依

常見會出問題:

  • System.Memory
  • System.Buffers
  • System.Runtime.CompilerServices.Unsafe

👉 WebForms + packages.config 很容易漏

解法

1️⃣ 加入 bindingRedirect(重要)


<dependentAssembly> <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-*" newVersion="最新版本" /> </dependentAssembly>

2️⃣ 或改用:PackageReference(比較穩)

🔴 3. Excel 讀寫行為差異(少數但會踩)

現象

  • 日期錯誤
  • 格式跑掉
  • CellType 行為不同

原因:底層 Apache POI 更新

影響範圍

  • .xlsx 比 .xls 穩
  • 舊程式碼(尤其 CellType enum)可能壞

範例雷點


cell.CellType == CellType.String  // 舊寫法可能有問題   

👉 2.8.0 有些情況需改用:


cell.ToString()   

🔴 4. HSSF / XSSF 邊界問題(舊 Excel)

現象:.xls 寫入失敗或格式異常

原因:2.8.0 對舊格式支援更嚴格

👉 如果你有:

匯出 .xls(Excel 97-2003)

👉 風險較高

🔴 5. 記憶體與效能變化

現象:匯出大檔變慢 / 吃記憶體

原因:內部結構調整

👉 建議:大檔改用 SXSSF(streaming)

🟡 6. 套件衝突( ValueTuple 類問題)

2.8.0 可能間接拉進:

  • System.ValueTuple
  • 其他 BCL 補件

👉 舊專案容易出現:

  • 版本衝突
  • bin 目錄 DLL 混亂

✅ 綜合結論(給你實務建議)

如果你是:👉 ASP.NET WebForms + .NET Framework 4.8

✔ 保守建議

👉 留在 2.7.6(最穩)

✔ 如果要升級 2.8.0

務必做:

  • 清空 bin / obj
  • 補齊 bindingRedirect
  • 檢查這些 DLL:
    • System.Memory
    • System.Buffers
  • 測試:
    • Excel 匯出(特別是日期)
    • Excel 匯入(CellType)
  • 若用 .xls 👉 重點測

💡 額外建議

如果你只是:匯出 Excel(不需複雜操作)

👉 可以考慮:ClosedXML

優點:

  • API 比 NPOI 直覺
  • .NET Framework 支援更穩
  • 比較少相依地雷

(完)

(完)