2026年4月15日 星期三

[研究]ClosedXML 0.105.0 是否相依 System.ValueTuple 測試(二)

[研究]ClosedXML 0.105.0 是否相依 System.ValueTuple 測試(二)

2025-04-15

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2

********************************************************************************

[研究]System.ValueTuple 4.5.0 升級到 4.6.x 後執行出錯
https://shaurong.blogspot.com/2026/04/systemvaluetuple-450-46x.html
根據這篇,ChatGPT 說 ClosedXML 0.105 在 Graphics engine 會強制載入 font engine,直接觸發 ValueTuple load chain

[研究]ClosedXML 0.105.0 是否相依 System.ValueTuple 測試
https://shaurong.blogspot.com/2026/04/closedxml-01050-systemvaluetuple.html
根據這篇,沒有 ValueTuple

此測試用 NuGet 多安裝了 System.ValueTuple 4.6.2

**********

packages.config


<?xml version="1.0" encoding="utf-8"?> <packages> <package id="ClosedXML" version="0.105.0" targetFramework="net48" /> <package id="ClosedXML.Parser" version="2.0.0" targetFramework="net48" /> <package id="DocumentFormat.OpenXml" version="3.5.1" targetFramework="net48" /> <package id="DocumentFormat.OpenXml.Framework" version="3.5.1" targetFramework="net48" /> <package id="ExcelNumberFormat" version="1.1.0" targetFramework="net48" /> <package id="Microsoft.Bcl.HashCode" version="6.0.0" targetFramework="net48" /> <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="4.1.0" targetFramework="net48" /> <package id="RBush.Signed" version="4.0.0" targetFramework="net48" /> <package id="SixLabors.Fonts" version="1.0.1" targetFramework="net48" /> <package id="System.Buffers" version="4.6.1" targetFramework="net48" /> <package id="System.Memory" version="4.6.3" targetFramework="net48" /> <package id="System.Numerics.Vectors" version="4.6.1" targetFramework="net48" /> <package id="System.Runtime.CompilerServices.Unsafe" version="6.1.2" targetFramework="net48" /> <package id="System.ValueTuple" version="4.6.2" targetFramework="net48" /> </packages>

Default.aspx


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <form id="form1" runat="server"> <asp:Button ID="btnExport" runat="server" Text="匯出 Excel" OnClick="btnExport_Click" /> </form> </body> </html>

Default.aspx.cs


using ClosedXML.Excel; using System; using System.Data; using System.IO; namespace WebApplication1 { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnExport_Click(object sender, EventArgs e) { // 建立測試資料 DataTable dt = GetSampleData(); using (XLWorkbook wb = new XLWorkbook()) { var ws = wb.Worksheets.Add(dt, "Sheet1"); // 設定樣式 ws.Columns().AdjustToContents(); ws.Row(1).Style.Font.Bold = true; // 輸出 Response.Clear(); Response.Buffer = true; Response.Charset = ""; Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment;filename=Export.xlsx"); using (MemoryStream ms = new MemoryStream()) { wb.SaveAs(ms); ms.WriteTo(Response.OutputStream); Response.Flush(); Response.End(); } } } private DataTable GetSampleData() { DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("姓名", typeof(string)); dt.Columns.Add("日期", typeof(DateTime)); dt.Columns.Add("金額", typeof(decimal)); dt.Rows.Add(1, "王小明", DateTime.Now, 1000); dt.Rows.Add(2, "李小華", DateTime.Now.AddDays(-1), 2000); dt.Rows.Add(3, "陳小美", DateTime.Now.AddDays(-2), 3000); return dt; } } }

********************************************************************************

Deploy 後實際測試



執行時期沒有發生錯誤,看起來正常。
ClosedXML 0.105 在 Graphics engine 會強制載入 font engine,直接觸發 ValueTuple load chain 的情況,此測試中沒有發生,或是 ChatGPT 的說法有問題???

(完)

相關

沒有留言:

張貼留言