使用mkbundle打包GTK独立应用时遇TypeLoadException错误求助
mkbundle打包GTK#独立应用失败:System.TypeLoadException找不到System程序集
我最近在尝试用Mono的mkbundle工具打包一个仅加载窗口的小型GTK#程序,目的是生成可以在未安装Mono及相关依赖库的嵌入式系统中运行的独立二进制文件,但遇到了一个棘手的TypeLoadException问题,希望社区能帮忙看看。
已做的准备工作
- 我已经为所有依赖项准备了本地副本,相关的
.dll文件和对应的dll映射配置文件都放在了程序的Debug目录下(如果不使用本地副本,mkbundle命令直接执行失败)。 - 执行的
mkbundle命令如下:
mkbundle -o App App.exe --simple --deps --machine-config "/usr/etc/mono/4.5/machine.config" --config "/etc/mono/config"
- 命令执行完成后,输出显示已经成功链接了所需的程序集和库,包括
/etc/mono/config中的DLL以及GTK相关依赖项。
遇到的问题
运行生成的二进制文件./App时,程序直接崩溃,抛出了以下错误:
Unhandled Exception: System.TypeLoadException: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not load type of field 'GLib.Object:before_handlers' (15) due to: Could not load file or assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. assembly:glib-sharp.dll type:Object member:(null) assembly:glib-sharp.dll type:InitiallyUnowned member:(null) assembly:gtk-sharp.dll type:Object member:(null) assembly:gtk-sharp.dll type:Widget member:(null) assembly:gtk-sharp.dll type:Container member:(null) assembly:gtk-sharp.dll type:Bin member:(null) assembly:gtk-sharp.dll type:Window member:(null) [ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not set up parent class, due to: Could not load type of field 'GLib.Object:before_handlers' (15) due to: Could not load file or assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. assembly:glib-sharp.dll type:Object member:(null) assembly:glib-sharp.dll type:InitiallyUnowned member:(null) assembly:gtk-sharp.dll type:Object member:(null) assembly:gtk-sharp.dll type:Widget member:(null) assembly:gtk-sharp.dll type:Container member:(null) assembly:gtk-sharp.dll type:Bin member:(null) assembly:gtk-sharp.dll type:Window member:(null)
排查情况
我已经多次重复这个打包流程,确认没有外部依赖的小型控制台应用可以正常打包并运行,所以问题应该出在GTK#相关的依赖处理上。
有没有朋友遇到过类似的问题?或者能帮我指出操作中的失误,提供可行的解决方案?
内容的提问来源于stack exchange,提问作者Ricardo Ferreira da Silva
相关产品推荐
相关产品推荐

