c# - 为什么 AWS Lambda 环境中的 EPPlus Excel 库会抛出 "The type initializer for ' Gdip' 抛出异常”

标签 c# .net aws-lambda epplus

将此问题发布给遇到相同问题的其他人。我的回答如下。

我创建了一个 AWS Lambda 方法,它接收一系列用于生成报告的查询参数。使用出色的 EPPlus 将报告数据保存在 Excel 文件中图书馆。当我在开发环境中运行代码时,它执行时没有问题。在我将代码部署到 AWS 并通过 URL 调用它之后,我得到以下异常:

The type initializer for 'Gdip' threw an exception

为什么在部署后会出现这种情况,但在开发环境中却能正常运行?

最佳答案

我能够确定的是,在尝试自动调整列宽大小以适应其中一个工作表中提供的数据时发生错误。 EPPlus 为一个范围提供了一个很有用的 AutoFitColumns 方法,该方法将根据范围中最宽的数据调整列的大小。一旦我将这行代码确定为异常的来源,一切就都说得通了。

我还没有证实这一点,但我假设 EPPlus 循环遍历范围内每个单元格中的文本并调用 .Net Graphics.MeasureString System.Drawing 命名空间中的方法来确定渲染文本的宽度。确定最宽的字符串后,相应地设置列宽。

问题是 GDI+ API 在 AWS lambda 环境中似乎不可用。我相信您可以将 libgdiplus 添加到您的 AWS Lambda 环境中(请参阅论坛讨论 herehere)。但是,我没有尝试更改我的配置,而是选择启用自动换行的默认列宽。

关于c# - 为什么 AWS Lambda 环境中的 EPPlus Excel 库会抛出 "The type initializer for ' Gdip' 抛出异常”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69967074/

相关文章:

c# - 从 SqlCommand 对象返回一个列表——我怎样才能让数据库尽可能少地工作?

amazon-web-services - 如何为 lambda 超时设置 CloudWatch 警报?

aws-lambda - 将 Lambda 日志写入 CloudWatch 时出现问题,可能是什么问题?

c# - 如何压缩文件

java - 如何使用 SQS 事件对 aws lambda 进行单元测试

c# - 在 IIS 中托管 RestAPI

c# - Try {} Catch(exception){throw}发生类型为'System.NullReferenceException'的异常

c# - IndexOf 方法在 C#/Java 中应该返回 -1 时返回 0

c# - 不可等待为 "fire & forget"- 使用安全吗?

javascript - 将脚本引用 (JavaScript) 添加到 Microsoft AJAX 部分回发上的脚本管理器