ASP.NET Core发布后System.Drawing.Common程序集缺失问题求助
解决System.Drawing.Common预览版发布到Unix服务器缺失dll的问题
嘿,这个问题我之前帮团队排查过类似情况,本质是预览版包的跨平台兼容性坑,再加上发布配置可能没跟上,给你几个靠谱的解决方向:
1. 切换到稳定版的System.Drawing.Common
你用的4.5.0-preview2属于早期预览包,这类版本通常存在跨平台支持不完善的问题,尤其是对应.NET Core 2.x的版本。优先卸载这个预览包,换成正式稳定版:
- 卸载命令:
Uninstall-Package System.Drawing.Common - 安装适配你项目的稳定版(比如4.7.0,完美兼容.NET Core 2.x):
Install-Package System.Drawing.Common -Version 4.7.0
2. 确保发布时指定正确的运行时标识(RID)
错误里提到了runtimes/unix/lib/netcoreapp2.0/路径,说明你的服务器是Unix/Linux环境,但发布时可能没指定对应平台的RID,导致相关运行时文件没被打包进去:
- 发布时直接指定RID(以Linux x64为例):
dotnet publish -r linux-x64 -c Release - 或者在项目的
.csproj文件里添加固定RID配置,避免每次发布手动输入:<PropertyGroup> <RuntimeIdentifier>linux-x64</RuntimeIdentifier> </PropertyGroup>
3. 安装Linux系统依赖库
System.Drawing.Common在Linux上依赖libgdiplus库(替代Windows的GDI+),服务器上没装的话也会导致dll加载失败:
- Debian/Ubuntu系统:
sudo apt-get install libgdiplus - CentOS/RHEL系统:
sudo yum install libgdiplus - 如果是64位系统,可能需要手动建立软链接:
sudo ln -s /usr/lib/libgdiplus.so /usr/lib64/libgdiplus.so
4. 检查发布输出的完整性
最后可以手动验证发布包的内容:
- 打开发布目录下的
General.deps.json,确认System.Drawing.Common的条目里包含runtimes/unix相关的路径配置 - 检查发布目录的
runtimes/unix/lib/netcoreapp2.0/文件夹,确认System.Drawing.Common.dll存在,如果缺失,重新执行带RID的发布命令
内容的提问来源于stack exchange,提问作者Morteza




