在Linux下编译的单声道应用程序不能在Windows中运行

我一直在使用Gtk#编写Mono中的一个小应用程序。 这是我的第一个Gtk#+ Mono应用程序,但我现在用.NET Framework开发了相当长的时间。

该应用程序的最终目标是在所有3个主要平台上运行(尽管我只有2个可以测试)。 到目前为止,我已经完成了那个目标。

有时我在Linux下开发,有时在Windows下开发。 两个系统都有最新的Gtk#的Mono 4.0.2。 但是,Linux编译的exe和Windows编译的exe文件之间存在差异。

编译时使用相同的.sln,通过git同步(GitHub是确切的,如果重要的话)。 具体设置包括

  • 目标Gtk#版本:2.12 w / gettext支持(Mono.Unix.Catalog是我的gettext类,资源加载器类是Gdk.Pixbuf)
  • 目标框架:Mono / .NET 4.5。 使用msbuild引擎,编译目标是可执行的w / GUI,选择Win32图标。
  • x86目标
  • 我在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安装)对编译和推出新的程序版本有点不便。


    由于您使用的是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项目时,它将使用针对.NET 4.0编译的Mono.Posix 4.0.0.0,而不是Mono .Posix 2.0.0.0是针对.NET 2.0编译的。

    有关于这个问题的一个开放的错误。

    理想情况下,用于Windows的GTK#安装程序将包含Mono.Posix 4.0.0.0,但目前它不包含。

    链接地址: http://www.djcxy.com/p/90103.html

    上一篇: Mono Application Compiled Under Linux Does Not Run in Windows

    下一篇: CruiseControl [.Net] vs TeamCity for continuous integration?