AWS Lambda Dot Net Core 3.1 在使用 Aspose Cells for .Net 时抛出 gdip 异常

Posted

技术标签:

【中文标题】AWS Lambda Dot Net Core 3.1 在使用 Aspose Cells for .Net 时抛出 gdip 异常【英文标题】:AWS Lambda Dot Net Core 3.1 throws gdip exception when using Aspose Cells for .Net 【发布时间】:2020-12-07 00:40:31 【问题描述】:

我在 Dot Net Core 3.1 中使用 Aspose Cells for .Net 将 Excel 转换为 PDF。它在本地环境中完美运行,但是当我在 AWS 环境(AWS Lambda)中托管时,它会抛出一个错误提示,

"fileName":"System.TypeInitializationException: 类型初始化器 对于 'Gdip' 抛出异常。 ---> System.DllNotFoundException: 无法加载共享库“libdl”或其依赖项之一。在 为了帮助诊断加载问题,请考虑设置 LD_DEBUG 环境变量:liblibdl:无法打开共享对象文件:否 此类文件或目录\n 在 Interop.Libdl.dlopen(String fileName, Int32 标志)\n 在 System.Drawing.SafeNativeMethods.Gdip.LoadNativeLibrary()\n at System.Drawing.SafeNativeMethods.Gdip..cctor()\n --- 内部结束 异常堆栈跟踪 ---\n at System.Drawing.SafeNativeMethods.Gdip.GdipNewPrivateFontCollection(IntPtr& fontCollection)\n 在 SelectPdf.Lib.ᡜ..ctor()\n.

我在我的项目中引用了“System.Drawing.Common”DLL 来解决这个问题。但是这个问题仍然没有得到解决。如何解决这个问题?

【问题讨论】:

【参考方案1】:

我们假设“AWS Lambdas”类似于 docker 容器,我们尝试了使用 Docker 容器的 Aspose.Cells 场景。我们已经在 Docker 容器中的 Ubuntu 16.04 x64 上测试了这个问题。 以下是我们的步骤:

我们使用的docker是:microsoft/dotnet,先安装: sudo docker pull microsoft/dotnet

然后,在直接运行它之后,我们在这个 docker 中遇到了问题,我们在保存到 PDF 时遇到了类似的错误。 我们做了以下事情来解决它:

我们安装了 libgdiplus:

apt-get update
apt-get install -y libgdiplus
cd /usr/lib && ln -s libgdiplus.so gdiplus.dll

并安装 libc6-dev:

apt-get install -y --no-install-recommends libc6-dev

我们发现 PDF 文件创建成功。

另外,请参阅 thread 以供参考,这有助于在 AWS lambda 环境中使用 Aspose.Cells。

PS。我在 Aspose 担任支持开发人员/布道者。

【讨论】:

你是对的,@RGS 很可能缺少libgdiplus

以上是关于AWS Lambda Dot Net Core 3.1 在使用 Aspose Cells for .Net 时抛出 gdip 异常的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 .Net Core 2.2 在 AWS Lambda 上使用 Kinesis FireHose 执行 PutRecord?

AWS Lambda、.Net Core 和 MySql:无法加载文件或程序集 'System.Diagnostics.TraceSource,版本 = 4.0.0.0

HTTP 错误 500.0 - Dot net core 3.1 中的 ASP.NET Core IIS 托管失败(进程中)

使用自包含框架时,dot net core 3.1 的设置 CI 构建配置失败

Dot Net Core dll 作为带有事件的 COM dll

无法使用 Chrome 登录 Dot Net Core 3 ASP.Net App,但可以使用 Firefox