You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unity项目中EPPlus在Mac平台(编辑器及构建)无法运行求助

解决EPPlus在Mac Unity环境下的DllNotFoundException: user32.dll问题

嘿,这个问题我之前帮不少开发者捋清楚过——核心原因是你用的EPPlus依赖的System.Drawing.Common库,在非Windows平台(比如Mac)上有天生的兼容性限制:它底层依赖Windows专属的GDI+组件(也就是报错里的user32.dll这类系统库),而Mac/Linux根本没有这套组件,自然会触发找不到DLL的错误。

可行的解决方案

1. 替换为跨平台图形库(推荐长期方案)

放弃依赖System.Drawing.Common,改用跨平台的图形处理库,比如SkiaSharp或者ImageSharp。EPPlus从5.x版本开始支持自定义图像渲染器,完美适配跨平台场景。

操作步骤:

  • 在Unity项目中导入兼容的SkiaSharp包(可以通过NuGet搜索,或者Unity Package Manager导入官方适配版本)
  • 初始化EPPlus时,配置它使用SkiaSharp作为图像引擎:
using OfficeOpenXml;
using SkiaSharp;
using OfficeOpenXml.Drawing;

// 先设置EPPlus的许可证上下文(必须步骤,否则会触发许可证报错)
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 根据你的商用需求选择Commercial或NonCommercial

// 配置EPPlus使用SkiaSharp替代System.Drawing
ExcelImageManager.ImageCreator = new SkiaSharpImageCreator();

这样就能完全绕开对Windows专属DLL的依赖,在Mac编辑器和独立构建中都能正常生成报表。

2. 临时启用System.Drawing的Unix支持(仅应急,不推荐)

如果你暂时不想替换库,可以通过修改项目配置强制开启System.Drawing.Common的非Windows支持,但这个方案是微软标记为弃用的,未来版本会移除,只适合临时测试:

  • 找到Unity项目对应的.csproj文件(通常在Assets/下的脚本文件夹里)
  • 添加以下配置节点:
<PropertyGroup>
  <EnableUnixSupport>true</EnableUnixSupport>
</PropertyGroup>

⚠️注意:这个方法仅适用于.NET 6及以上版本,而且在Unity IL2CPP构建模式下依然可能失效——因为IL2CPP会静态编译依赖,Mac上没有user32.dll还是会报错。

3. Unity构建额外注意事项

  • 构建Mac版本时,如果勾选了“Strip Engine Code”,要确保不要误删SkiaSharp/ImageSharp的相关动态库,必要时手动添加到保留列表
  • 选择NuGet包时,优先选标注兼容Unity的版本,避免引入不兼容的.NET框架版本

错误日志对应场景

你遇到的错误片段完全符合System.Drawing.Common在非Windows平台调用GDI+接口的典型报错:

DllNotFoundException: user32.dll
System.Drawing.KnownColorTable.SystemColorToArgb (Int32 index)
System.Drawing.KnownColorTable.UpdateSystemColors (System.Int32[] colorTable)
System.Drawing.KnownColorTable.In...

按照上面的方案调整后,应该就能解决Mac平台的运行问题了。

内容的提问来源于stack exchange,提问作者jobouk

火山引擎 最新活动