下面是我遇到的问题:我使用MonoDevelop编写了一个Gtk#程序,运行效果很好。 但是现在我希望能够在其他Linux机器上运行它,而不必安装MonoDevelop。
我的解决scheme有两个项目:主要的Gtk#应用程序和它所依赖的C#库项目。 所以当我build立主项目,它使得MainProject.exe和MainProject.exe.mdb,以及bin / Release文件夹中的DependencyProject.dll。
我尝试运行以下命令将其全部打包到单个可执行文件(从bin / Release文件夹运行):
mkbundle MainProject.exe -o mainproject --deps *.dll
但是,我得到这个错误运行该命令:
未处理的exception:
System.IO.FileNotFoundException:无法加载文件或程序集“gtk-sharp”或其某个依赖项。 该系统找不到指定的文件。
文件名:'gtk-sharp'
System.AppDomain.Load(System.String assemblyString,System.Security.Policy.Evidence assemblySecurity,Boolean refonly)[0x00000] in:0
在(包装远程调用与检查)System.AppDomain:加载(string,System.Security.Policy.Evidence,布尔)
在System.Reflection.Assembly.ReflectionOnlyLoad(System.String assemblyString)[0x00000] in:0
在IKVM.Reflection.Universe.DefaultResolver(System.String refname,布尔throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname,IKVM.Reflection.Module requestsModule,布尔throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname)[0x00000] in:0
在MakeBundle.QueueAssembly(System.Collections.Generic.List`1文件,System.String代码库)[0x00000] in:0
[ERROR] FATAL UNHANDLED EXCEPTION:System.IO.FileNotFoundException:无法加载文件或程序集“gtk-sharp”或其某个依赖项。 该系统找不到指定的文件。
文件名:'gtk-sharp'
System.AppDomain.Load(System.String assemblyString,System.Security.Policy.Evidence assemblySecurity,Boolean refonly)[0x00000] in:0
在(包装远程调用与检查)System.AppDomain:加载(string,System.Security.Policy.Evidence,布尔)
在System.Reflection.Assembly.ReflectionOnlyLoad(System.String assemblyString)[0x00000] in:0
在IKVM.Reflection.Universe.DefaultResolver(System.String refname,布尔throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname,IKVM.Reflection.Module requestsModule,布尔throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname)[0x00000] in:0
在MakeBundle.QueueAssembly(System.Collections.Generic.List`1文件,System.String代码库)[0x00000] in:0
我看到一些类似的问题的堆栈溢出问题,但没有一个提供任何实际的解决scheme。 我如何有效地使用这个mkbundle
命令?
如果你想要一个完全独立的应用程序, mkbundle
是非常好的,它不依赖单声道或与mono相关的任何东西来安装在目标机器上。
但是,在单声道页面中 ,您可以阅读:“生成的可执行文件是自包含的,不需要安装Mono运行环境,但是如果您的应用程序依赖单声道运行时或Gtk#链接的库,需要安装(Gtk#助手库想到)“。
如果你只是想从几个DLL创建一个可执行文件,那么ILRepack是一个更好的选择。
如果你正在部署到Windows,那么你可以包括GTK#安装程序与您的应用程序(.NET可能已经存在)。 如果您正在部署到Linux或Mac,则需要在运行应用程序之前安装单声道软件包(不一定是mono-complete
)。
希望这可以帮助。