Unity项目中EPPlus在Mac平台(编辑器及构建)无法运行求助
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




