Ubuntu20.04下.NET5 C#构建MonoGame项目报PrivateFontCollection未找到错误
问题本质
该类CS1069报错是Ubuntu环境下构建.NET 5、MonoGame跨平台项目的高频常见问题,完全可以通过调整项目.csproj配置解决,不需要修改业务代码逻辑。
报错的核心触发逻辑是:PrivateFontCollection类型的程序集转发规则存在平台差异——Windows环境下.NET 5 SDK内置了System.Drawing.Common的自动引用逻辑,不需要显式配置即可识别对应类型;但Linux环境下的.NET 5 SDK不会自动关联该程序集,加上MonoGame默认项目模板没有针对Linux场景补全引用规则,最终触发类型找不到的编译错误。
具体修复操作
- 第一步:安装和.NET 5版本完全匹配的
System.Drawing.Common依赖包,在项目根目录(即SAO.csproj所在路径)执行以下命令:
该版本是.NET 5分支下的最终稳定版本,公钥标识和报错提示中需要匹配的dotnet add package System.Drawing.Common --version 5.0.3cc7b13ffcd2ddd51完全一致,不会出现程序集标识不匹配的二次报错。 - 第二步:修改SAO.csproj文件的
<PropertyGroup>节点,补全三个关键配置,避免后续出现平台裁剪、引用丢失的问题:<!-- 关闭非Windows平台的System.Drawing.Common能力裁剪 --> <EnableWindowsTargeting>true</EnableWindowsTargeting> <!-- 声明Linux平台支持版本,匹配当前Ubuntu 20.04的系统版本 --> <SupportedOSPlatformVersion>20.0</SupportedOSPlatformVersion> <!-- 显式将System.Drawing.Common纳入项目私有引用,避免运行时程序集找不到 --> <ReferenceIncludeSystemDrawingCommon>true</ReferenceIncludeSystemDrawingCommon> - 第三步:清理旧编译缓存后重新构建,避免残留的编译产物干扰新的引用规则:
依次执行命令:dotnet clean dotnet build
避坑提醒
- 不要盲目安装最新版的
System.Drawing.Common包:从.NET 6版本开始,官方将该包的非Windows平台支持标记为弃用状态,高版本即使能通过编译,运行时也会抛出跨平台能力不支持的异常,针对当前.NET 5项目,固定使用5.0.3版本是最稳定的选择。 - 不需要重写业务代码中
PrivateFontCollection的相关调用逻辑:只要补全了正确的程序集引用,该类型在Linux环境下的字体加载、集合管理功能完全可以正常运行,不需要替换为第三方字体库实现。 - 如果构建完成后仍提示程序集不匹配,可以手动检查项目目录下的
obj/project.assets.json文件,确认System.Drawing.Common的引用路径指向安装的5.0.3版本即可。
内容的提问来源于stack exchange,提问作者ALiwoto
相关产品推荐
相关产品推荐

