C# 在Linux下编译的Mono应用程序不在Windows中运行

C# 在Linux下编译的Mono应用程序不在Windows中运行,c#,linux,windows,mono,C#,Linux,Windows,Mono,我一直在使用Gtk#在Mono中编译一个小型应用程序。这是我的第一个Gtk#+Mono应用程序,但我已经用.NET Framework开发了相当长的时间了 该应用程序的最终目标是在所有3个主要平台下运行(尽管我只有2个平台需要测试)。到目前为止,我已经完成了这个目标 有时我在Linux下开发,有时在Windows下开发。这两个系统都有Mono 4.0.2和最新的Gtk。但是,Linux编译的exe和Windows编译的exe之间存在差异 我在编译时使用相同的.sln,通过git同步(如果需要的话

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

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

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

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

  • 目标Gtk#版本:2.12 w/gettext支持(Mono.Unix.Catalog是我的gettext类,资源加载程序类是Gdk.Pixbuf)
  • 目标框架:Mono/.net4.5。使用msbuild引擎,编译目标是可执行的,并带有GUI,选择Win32图标
  • x86目标
我在Linux下构建:构建成功,没有错误,在Linux下运行良好。文件大小为142KB。这很重要。还有一件事需要注意:在Windows下,它没有图标(它是默认的程序图标)

然后我在Windows下构建相同的源代码、相同的设置:文件大小为228kb,有一个图标,运行正常

当我运行Linux构建的exe时,它会显示“LuaModuleManager.exe已停止工作”。“更多详情”如下:

这非常有趣,因为它是System.IO.FileNotFoundException。我似乎一辈子也弄不明白

还有一点需要注意:Windows编译的exe在Windows和Linux中运行良好,但Linux编译的exe仅在Linux中运行。并导致“LuaModuleManager.exe已停止工作”错误


那么问题出在哪里呢?启动到Windows虚拟机(或重新启动整个系统以进行Windows安装)对于编译和推出新版本的程序来说有点不方便

因为您使用的是Mono.Unix.Catalog,所以您的项目应该引用Mono.Posix程序集

问题很可能是在Windows上,只有Mono.Posix2.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

关于这个问题有一个很好的解释


理想情况下,用于Windows的GTK安装程序将包括Mono.Posix 4.0.0.0,但目前没有。

我明白了,那么在此之前,临时解决方案是什么?我只是在谷歌上搜索了什么是gettext,如果它是用于翻译的,那么取消选中gettext应该是安全的,因为我的应用程序不使用任何翻译。解决方法:1)不要使用Mono.Posix。2) 尝试引用特定版本(2.0.0.0)-不确定这是否有效。3) 在应用程序中部署Mono.Posix。我取消选中gettext并删除了对Mono.Posix的所有引用。现在一切正常,只希望图标可以在Linux上编译。非常感谢。
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