c# - 是否可以在 Windows Docker 容器中运行的 dotnet 核心应用程序中使用 EPPlus?
问题描述
我有一个 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。
是否可以使用 EPPlus 在托管在 nanoserver 映像中的 dotnet 核心应用程序上创建电子表格?还是我必须使用另一个库来生成 xlsx?如果可能的话,我想使用 EPPlus。我不能使用 linux 容器(不幸的是现在)
解决方案
我不知道它是否会起作用,但请尝试注释掉库中使用的任何方法System.Drawing.Common
,例如AutoFitColumns()
. 这就是导致它在我的 linux 容器上中断的原因。
推荐阅读
- macos - 新的 Macbook 不会运行 Tizen 模拟器
- jquery - 将 SHOUTcast 曲目信息拆分为“歌曲名称”和“艺术家姓名”
- javascript - 如何在javascript中声明没有空格的var
- python - 为类的不同实例并行化 python 代码
- loops - golang中的多重初始化
- apache-spark - Databricks 访问不使用 SPARK sc 的文件
- database - 使用相同的主键存储数据 Dynamodb
- java - 调整 Android Studios 示例 BluetoothLeGatt 代码以显示可检查列表而不是列表视图
- c++ - 提升序列化,按基类型加载归档类会给出错误数据
- android - Android In App Billing:如何检测和控制购买?