You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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所在路径)执行以下命令:
    dotnet add package System.Drawing.Common --version 5.0.3
    
    该版本是.NET 5分支下的最终稳定版本,公钥标识和报错提示中需要匹配的cc7b13ffcd2ddd51完全一致,不会出现程序集标识不匹配的二次报错。
  • 第二步:修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 01:27:02