[研究]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 的說法有問題???(完)
相關