以下是我遇到的问题:我使用MonoDevelop编写了一个Gtk#程序,它运行得很好。但现在我希望能够在其他Linux机器上运行它,而无需安装MonoDevelop。
我的解决方案有两个项目:主要的Gtk#应用程序,以及它所依赖的C#库项目。因此,当我构建主项目时,它会生成MainProject.exe和MainProject.exe.mdb,以及bin / Release文件夹中的DependencyProject.dll。
我尝试运行以下命令将其全部打包成一个可执行文件(从bin / Release文件夹运行):
mkbundle MainProject.exe -o mainproject --deps *.dll
但是,我在运行该命令时遇到此错误:
未处理的例外:
System.IO.FileNotFoundException:无法加载文件或程序集> -kk-sharp'或其中一个依赖项。系统找不到指定的文件。
文件名:' gtk-sharp'
在System.AppDomain.Load(System.String assemblyString,System.Security.Policy.Evidence assemblySecurity,Boolean refonly)[0x00000] in:0
at(wrapper remoting-invoke-with-check)System.AppDomain:Load(string,System.Security.Policy.Evidence,bool)
在System.Reflection.Assembly.ReflectionOnlyLoad(System.String assemblyString)[0x00000] in:0
在IKVM.Reflection.Universe.DefaultResolver(System.String refname,Boolean throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname,IKVM.Reflection.Module requesModule,Boolean throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname)[0x00000] in:0
在MakeBundle.QueueAssembly(System.Collections.Generic.List`1文件,System.String代码库)[0x00000]中:0
[错误]致命的未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集> -kk-sharp'或其中一个依赖项。系统找不到指定的文件。
文件名:' gtk-sharp'
在System.AppDomain.Load(System.String assemblyString,System.Security.Policy.Evidence assemblySecurity,Boolean refonly)[0x00000] in:0
at(wrapper remoting-invoke-with-check)System.AppDomain:Load(string,System.Security.Policy.Evidence,bool)
在System.Reflection.Assembly.ReflectionOnlyLoad(System.String assemblyString)[0x00000] in:0
在IKVM.Reflection.Universe.DefaultResolver(System.String refname,Boolean throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname,IKVM.Reflection.Module requesModule,Boolean throwOnError)[0x00000] in:0
在IKVM.Reflection.Universe.Load(System.String refname)[0x00000] in:0
在MakeBundle.QueueAssembly(System.Collections.Generic.List`1文件,System.String代码库)[0x00000]中:0
我看到了其他一些类似问题的Stack Overflow问题,但没有一个提供任何实用的解决方案。如何有效地使用此mkbundle
命令?
答案 0 :(得分:1)
mkbundle
非常棒,如果你想要一个完全独立的应用程序,它不依赖单声道或与单声道相关的任何东西安装在目标机器上。
但是,在mono pages中,您可以读到: "生成的可执行文件是自包含的,不需要安装Mono运行时即可运行。但是,如果您的应用程序依赖于由单声道运行时或Gtk#链接的库,则需要安装这些库(Gtk #helper库)。"
如果您只是想从几个dll创建一个可执行文件,那么ILRepack是更好的选择。
如果要部署到Windows,则可以在应用程序中包含GTK# installer(.NET可能已经存在)。如果要部署到linux或mac,则需要在应用运行之前安装 mono 软件包(不一定是mono-complete
)。
希望这有帮助。