.net mkbundle与GTK#

.net mkbundle与GTK#,.net,mono,gtk,gtk#,mkbundle,.net,Mono,Gtk,Gtk#,Mkbundle,我正在尝试使用mkbundle,这样我就可以分发GTK应用程序,而无需用户安装.NET/Mono或GTK。我已经成功地绑定了一个使用winforms的应用程序,但由于某种原因,当我对GTK应用程序执行相同操作时,它将无法工作 这就是我从cygwin那里得到的: $mkbundle--deps a.exe 操作系统:Windows 来源:1自动依赖项:True 未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集“gtk sharp”或其依赖项之一。系

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

这就是我从cygwin那里得到的:

$mkbundle--deps a.exe
操作系统:Windows
来源:1自动依赖项:True

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

但我的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:无法执行二进制文件

所以它应该能够找到文件


任何帮助都将不胜感激

好的,我不知道这是否是一个真正的解决方案,但我只是将程序集从C:\GtkSharp\2.12\lib\gtk-sharp-2.0复制到C:\Mono-2.10.5\lib\Mono\4.0,现在它似乎通过以下步骤捆绑好了:

mkbundle-c-o host.c-oo bundle.o--deps app.exe

nano host.c

将以下内容更改为:

#ifdef _WIN32
#include <windows.h>
#endif`

这对我很管用。虽然我还需要将machine.config从C:\Mono-2.10.5\etc\Mono\4.0复制到我的应用程序所在的目录,并将--machine-config machine.config传递给mkbundle。

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

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

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

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

4.)打开cygwin并导航到应用程序的输出文件夹,其中包含eCecuteable和scipt,例如YourProject/bin/Release

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

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

尝试为mkbundle提供每个assemblymkbundle的完整路径“找不到程序集`/cygdrive/c/GtkSharp/2.12/lib/gtk-sharp-2.0/gtk sharp.dll'为什么mkbundle不能正常工作!
#ifdef _WIN32
#include <windows.h>
#endif
#undef _WIN32
gcc -mno-cygwin -o bundled.exe -Wall host.c `pkg-config --cflags --libs mono-2|dos2unix` bundle.o