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

mono-6.6.0环境mkbundle打包GTK项目netstandard缺失报错求助

解决方案

1. netstandard程序集加载失败修复

  • 你在csproj中添加netstandard引用的操作正确,报错是因为mkbundle默认不会自动打包facade类型的程序集,需要显式指定:
    首先确认项目Release输出目录中存在netstandard.dll(你设置了<Private>True</Private>,生成时会自动复制到输出目录,缺失的话可以从mono安装目录或者对应netstandard nuget包中手动拷贝)
    调整mkbundle命令,添加--lib参数指向项目输出目录,同时显式引入netstandard.dll:
    1. Windows交叉编译命令:
    mkbundle TimeDateCalculator.gtk.exe --simple -o timedatecalculator --cross mono-6.6.0-ubuntu-18 --lib "你的项目Release输出目录绝对路径" netstandard.dll
    
    1. WSL本地编译命令:
      先执行环境变量设置让mono可以找到引用的程序集,再运行打包命令:
    export MONO_PATH="你的项目Release输出目录绝对路径"
    mkbundle -o timedatecalculator --simple TimeDateCalculator.gtk.exe --config /etc/mono/config --machine-config /etc/mono/4.5/machine.config --lib "你的项目Release输出目录绝对路径" netstandard.dll
    
  • 额外注意:Windows端交叉编译用的mono交叉工具链版本,需要和WSL中安装的mono版本完全一致,你用的是mono 6.6的交叉包,WSL中不要安装更高版本的mono,避免版本不兼容导致运行时加载失败。

2. gtksharpglue-2 依赖缺失修复

这个错误是mkbundle仅打包托管程序集,不会自动打包GTK#的原生依赖导致的,不需要降级.NET Framework版本,直接改回.NET Framework 4.8即可,按以下步骤处理:

  • 先在WSL环境安装完整的GTK#运行依赖:
    sudo apt update
    sudo apt install gtk-sharp2 libgtk2.0-0 xauth
    
  • 如果需要制作完全自包含的程序包(无需用户提前安装依赖),需要在mkbundle命令中通过--native-library参数显式打包所有原生依赖:
    先找到libgtksharpglue-2.so的实际路径(一般在/usr/lib/x86_64-linux-gnu/或者/usr/lib/cli/gtk-sharp-2.0/目录下),再修改打包命令添加对应参数,示例:
    mkbundle -o timedatecalculator --simple TimeDateCalculator.gtk.exe --config /etc/mono/config --machine-config /etc/mono/4.5/machine.config --lib "你的项目Release输出目录绝对路径" netstandard.dll --native-library /usr/lib/x86_64-linux-gnu/libgtksharpglue-2.so --native-library /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so
    
    其他GTK相关原生依赖如果运行时报错也用同样方法添加进去即可,也可以选择将所有用到的.so文件和生成的可执行文件放在同一目录下,运行时会自动加载。

内容的提问来源于stack exchange,提问作者Eigil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:36:03