Ubuntu Server 20.04中Bitmap构造函数传路径为何抛出ArgumentException参数无效错误
问题原因
- 路径分隔符不兼容:Windows 采用反斜杠
\作为路径分隔符,而 Ubuntu 等 Linux 系统采用正斜杠/。你代码中硬编码的\\分隔符在 Linux 环境下会被识别为文件名的组成部分,导致最终拼接的路径和实际文件存放路径不匹配,Bitmap 读取不到有效文件就会抛出参数无效错误。 - 原生依赖缺失:
System.Drawing.Common库依赖 GDI+ 组件实现图像处理能力,Linux 系统默认没有预装对应的兼容原生库libgdiplus;此外从 .NET 6 版本开始,System.Drawing.Common被官方标记为 Windows 专属库,跨平台运行时默认会触发异常。
解决方案
- 修正路径拼接逻辑:放弃硬编码路径分隔符,改用 .NET 内置的跨平台路径拼接 API,修改代码如下:
// 替换原来的硬编码路径写法 Bitmap cardTemp = new Bitmap(Path.Combine("assets", "groups", group, idolname, filename)); Bitmap card = new Bitmap(cardTemp, 800, 1200); Bitmap rareFrameTemp = new Bitmap(Path.Combine("assets", "frames", $"{rarity}Frame.png"));
- 安装 Linux 下的 GDI+ 兼容库,在 Ubuntu 20.04 终端执行命令:
sudo apt update && sudo apt install -y libgdiplus - 若你使用的是 .NET 6 及更高版本,需要在项目的
[项目名].runtimeconfig.json文件的configProperties节点下添加配置,开启 Unix 环境支持:
{ "runtimeOptions": { "configProperties": { "System.Drawing.EnableUnixSupport": true } } }
如果是 .NET 7 及更高版本,更建议替换为原生跨平台图像处理库,无需依赖原生组件,兼容性和稳定性更好。
内容的提问来源于stack exchange,提问作者Viuツ
相关产品推荐
相关产品推荐

