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

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

火山引擎 最新活动