我一直在使用Gtk#编译Mono中的一个小应用程序。这是我的第一个Gtk#+ Mono应用程序,但我现在已经使用.NET Framework开发了相当长的时间。
该应用程序的最终目标是在所有3个主要平台下运行(尽管我只有2个要测试)。到目前为止,我已经完成了那种的目标。
有时我在Linux下开发,有时在Windows下开发。两个系统都配备了Mono 4.0.2和最新的Gtk#。但是,Linux编译的exe和Windows编译的exe之间存在差异。
我在编译时使用相同的.sln,通过git同步(GitHub确切地说,如果重要的话)。具体设置包括
我在Linux下构建:成功构建,没有错误,在Linux下运行良好。文件大小为142 kb。这个很重要。还有一点需要注意:在Windows下,它没有图标(这是默认的程序图标)。
然后我在Windows下构建相同的源,相同的设置:文件大小为228kb,有一个图标,运行正常。
当我运行Linux内置的exe时,它说“LuaModuleManager.exe已经停止工作”。 “更多细节”是这样的:
Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01: luamodulemanager.exe
Problem Signature 02: 0.7.0.6
Problem Signature 03: 0
Problem Signature 04: LuaModuleManager
Problem Signature 05: 0.7.0.6
Problem Signature 06: 0
Problem Signature 07: f
Problem Signature 08: 13
Problem Signature 09: System.IO.FileNotFoundException
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
这真是有趣,它是一个System.IO.FileNotFoundException。我似乎无法弄清楚我的生活。
还有一点要注意:Windows编译的exe在Windows和Linux中运行良好,但Linux编译的exe只能在Linux中运行。并导致“LuaModuleManager.exe已停止工作”错误。
那么问题可能是什么?引导到Windows VM(或重新启动我的整个系统以进入我的Windows安装)只是编译和推出一个新的程序版本有点不方便。
答案 0 :(得分:2)
由于您使用的是Mono.Unix.Catalog,因此您的项目应该引用Mono.Posix程序集。
问题可能是在Windows上只有Mono.Posix 2.0.0.0与GTK#2.12一起安装。
在Linux上,你将拥有Mono.Posix 2.0.0.0和4.0.0.0,当你在Linux上使用xbuild编译.NET 4项目时,它将使用Mono.Posix 4.0.0.0,它是针对.NET 4.0编译的,而不是针对.NET 2.0编译的Mono.Posix 2.0.0.0。
这个问题有open bug。
理想情况下,Windows的GTK#安装程序将包含Mono.Posix 4.0.0.0,但目前它没有。