mkbundle 和 GTK#

2024-04-14

我正在尝试使用 mkbundle,以便我可以分发 GTK# 应用程序,而无需用户安装 .NET/Mono 或 GTK#。我已经成功捆绑了一个使用 winforms 的应用程序,但由于某种原因,当我对 GTK# 应用程序执行相同操作时,它无法工作。

这是我从 cygwin 得到的:

$ mkbundle --deps a.exe OS is: Windows Sources: 1 Auto-dependencies: True

未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集“gtk-sharp”或其依赖项之一。该系统找不到指定的文件。
文件名:'gtk-sharp'
在 System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity) [0x00000] 中:0
在(包装器远程调用带检查)System.AppDomain:加载(System.Reflection.AssemblyName,System.Security.Policy.Evidence)
在 System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] 中:0
at (包装器远程调用带检查) System.AppDomain:Load (System.Reflection.AssemblyName)
在 System.Reflection.Assembly.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] 中:0
在 MakeBundle.QueueAssembly(System.Collections.ArrayList 文件,System.String 代码库)[0x00000] 中:0
在 MakeBundle.Main (System.String[] args) [0x00000] 中:0
[错误]致命的未处理异常:System.IO.FileNotFoundException:无法加载文件或程序集“gtk-sharp”或其依赖项之一。该系统找不到指定的文件。
文件名:'gtk-sharp'
在 System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity) [0x00000] 中:0
在(包装器远程调用带检查)System.AppDomain:加载(System.Reflection.AssemblyName,System.Security.Policy.Evidence)
在 System.AppDomain.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] 中:0
at (包装器远程调用带检查) System.AppDomain:Load (System.Reflection.AssemblyName)
在 System.Reflection.Assembly.Load (System.Reflection.AssemblyName assemblyRef) [0x00000] 中:0
在 MakeBundle.QueueAssembly(System.Collections.ArrayList 文件,System.String 代码库)[0x00000] 中:0
在 MakeBundle.Main (System.String[] args) [0x00000] 中:0`

但我的 PATH 变量中有 /cygdrive/c/GtkSharp/2.12/lib 。我可以检查这一点,就好像我在 cygwin 中输入“gtk-sharp.dll”一样,我得到以下返回值:

$ gtk-sharp.dll bash: /cygdrive/c/GtkSharp/2.12/lib/gtk-sharp-2.0/gtk-sharp.dll: cannot execute binary file

所以应该能够找到该文件!

任何帮助将非常感激。


我找到了一个可以完成所有这些操作的 shell 脚本,并将其修改为最新版本,截至 2013 年 5 月,您可以按如下方式使用该脚本:

https://gist.github.com/tebjan/5581296 https://gist.github.com/tebjan/5581296

1.) 安装 cygwin 并确保选择以下软件包: - gcc-mingw - pkg 配置 - mingw-zlib1 - mingw-zlib-devel

2.) 安装 Mono 发行包:“Mono for Windows、Gtk# 和 XSP”

3.) 下载脚本,将其放在您的应用程序旁边,并对其进行修改以适合您的环境(仔细阅读文件中的注释)。

4.) 打开 cygwin 并导航到可执行文件和脚本所在的应用程序的输出文件夹,例如你的项目/bin/发布

5.) 使用以下命令执行脚本:./mkbundle_cygwin.sh

故障排除: 如果您的捆绑可执行文件无法运行,请确保原始 .NET 应用程序可以在单声道上运行。您可以通过调用 mono.exe 并将 .NET 应用程序传递给它来测试它,或者通过安装 XamarinStudio 并从那里运行您的项目(让您将 mono 设置为运行时)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mkbundle 和 GTK# 的相关文章

随机推荐