我正在尝试使用 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(使用前将#替换为@)