如何在Linux上捆绑Mono/GTK应用程序?

如何在Linux上捆绑Mono/GTK应用程序?,linux,mono,gtk,gtk#,mkbundle,Linux,Mono,Gtk,Gtk#,Mkbundle,我遇到了一个问题:我用MonoDevelop编写了一个Gtk程序,它运行得很好。但现在我希望能够在其他Linux机器上运行它,而不必安装MonoDevelop 我的解决方案有两个项目:主Gtk应用程序和它所依赖的C库项目。因此,当我构建主项目时,它会在bin/Release文件夹中生成MainProject.exe和MainProject.exe.mdb以及DependencyProject.dll 我尝试运行以下命令将其打包到单个可执行文件中(从bin/Release文件夹运行): 但是,我在

我遇到了一个问题:我用MonoDevelop编写了一个Gtk程序,它运行得很好。但现在我希望能够在其他Linux机器上运行它,而不必安装MonoDevelop

我的解决方案有两个项目:主Gtk应用程序和它所依赖的C库项目。因此,当我构建主项目时,它会在bin/Release文件夹中生成MainProject.exe和MainProject.exe.mdb以及DependencyProject.dll

我尝试运行以下命令将其打包到单个可执行文件中(从bin/Release文件夹运行):

但是,我在运行该命令时出现以下错误:

未处理的异常:

System.IO.FileNotFoundException:无法加载文件或程序集“gtk sharp”或其依赖项之一。系统找不到指定的文件

文件名:“gtk夏普”

在:0中的System.AppDomain.Load(System.String assemblyString、System.Security.Policy.Evidence assemblySecurity、Boolean ReOnly)[0x00000]处

在(包装器远程调用检查)System.AppDomain:Load(字符串,System.Security.Policy.Evidence,bool)

在0中的System.Reflection.Assembly.ReflectionOnlyLoad(System.String assemblyString)[0x00000]处

在IKVM.Reflection.Universe.DefaultResolver(System.String refname,Boolean throwOnError)[0x00000]中:0

在IKVM.Reflection.Universe.Load(System.String refname,IKVM.Reflection.Module requestingModule,Boolean throwOnError)[0x00000]中:0

在:0中的IKVM.Reflection.Universe.Load(System.String refname)[0x00000]处

在MakeBundle.QueueAssembly(System.Collections.Generic.List`1文件,System.String代码基)[0x00000]中:0

[错误]致命的未处理异常:System.IO.FileNotFoundException:无法加载文件或程序集“gtk sharp”或其依赖项之一。系统找不到指定的文件

文件名:“gtk夏普”

在:0中的System.AppDomain.Load(System.String assemblyString、System.Security.Policy.Evidence assemblySecurity、Boolean ReOnly)[0x00000]处

在(包装器远程调用检查)System.AppDomain:Load(字符串,System.Security.Policy.Evidence,bool)

在0中的System.Reflection.Assembly.ReflectionOnlyLoad(System.String assemblyString)[0x00000]处

在IKVM.Reflection.Universe.DefaultResolver(System.String refname,Boolean throwOnError)[0x00000]中:0

在IKVM.Reflection.Universe.Load(System.String refname,IKVM.Reflection.Module requestingModule,Boolean throwOnError)[0x00000]中:0

在:0中的IKVM.Reflection.Universe.Load(System.String refname)[0x00000]处

在MakeBundle.QueueAssembly(System.Collections.Generic.List`1文件,System.String代码基)[0x00000]中:0


我还看到了其他一些类似问题的堆栈溢出问题,但都没有提供任何实用的解决方案。如何有效地使用此
mkbundle
命令?

mkbundle
如果您想要一个完全独立的应用程序,它不依赖于在目标机器中安装的mono或任何与mono相关的东西,那么它非常好

但是,在中,您可以看到: “生成的可执行文件是自包含的,运行时不需要安装Mono运行时。但是,如果应用程序依赖于Mono运行时或Gtk链接的库,则需要安装这些库(请记住Gtk辅助库)。”

如果您只想从几个dll创建一个可执行文件,那么这是一个更好的选择

如果您正在部署到Windows,那么您可以只在应用程序中包含(.NET可能已经存在)。如果要部署到linux或mac,则需要在应用程序运行之前安装mono软件包(不一定是
mono complete


希望这有帮助。

我在虚拟机ubuntu 14上也遇到了同样的问题。当我开始清理ubuntu 15安装时,mkbundle完成了,没有任何错误。现在,我对内置捆绑包有不同的问题,但将在单独的问题中对此进行说明。我如何将mono runtime与GTK应用程序捆绑在一起?可能吗?我真的不知道。Mac世界对我来说是陌生的。
mkbundle MainProject.exe -o mainproject --deps *.dll