【发布时间】:2019-06-17 04:28:19
【问题描述】:
我有一个 dotnet core 2.1 web api,它有一个生成 .xlsx 电子表格的操作。它创建了一个 FileStreamResult ,然后浏览器可以处理。生成电子表格的代码如下:
using (var excelFile = new ExcelPackage())
using (var worksheet = excelFile.Workbook.Worksheets.Add("Sheet 1"))
{
...
//insert data into worksheet
return new FileStreamResult(new MemoryStream(excelFile.GetAsByteArray()), "application/octet-stream") { FileDownloadName = "Report.xlsx" };
}
在 IIS 中托管它可以正常工作,并且会生成电子表格。
当我在 windows docker 容器中托管应用程序时,特别是图像:microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-sac2016 在尝试生成报告时出现以下异常:
System.TypeInitializationException: 'Gdip' 的类型初始化器 抛出异常。 ---> System.DllNotFoundException:无法加载 DLL 'gdiplus.dll'
经过一番研究,我意识到 gdiplus 不存在于 nanoserver 映像中。
是否可以使用 EPPlus 在托管在 nanoserver 映像中的 dotnet 核心应用程序上创建电子表格?还是我必须使用另一个库来生成 xlsx?如果可能的话,我想使用 EPPlus。我不能使用 linux 容器(不幸的是现在)
【问题讨论】:
-
好问题。维卡斯会很自豪的。
-
您是否考虑过在 Server Core 而不是 Nano Server 之上构建?
-
我已经考虑过这一点,但目前这是一个相对较小的功能,在服务器核心上构建似乎有点过分。据我了解,从速度和安全性的角度来看,nano server 非常适合托管 dotnet core。如果我无法避免,那么我可能不得不走那条路。我希望还有另一种我错过的方式
-
尝试改用Spire Xls。我发现这是一个很棒的工具。
-
你能确认没有使用gdi plus吗?
标签: c# docker .net-core gdi+ epplus