首页 > 解决方案 > 是否可以在 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 容器(不幸的是现在)

标签: c#docker.net-coregdi+epplus

解决方案


我不知道它是否会起作用,但请尝试注释掉库中使用的任何方法System.Drawing.Common,例如AutoFitColumns(). 这就是导致它在我的 linux 容器上中断的原因。


推荐阅读