我应该使用mono来开发linux应用程序

时间:2013-08-28 04:29:35

标签: c# visual-studio-2012 mono

我在microsoft开发堆栈上有多年的开发经验,主要是visual studio 2012 / c#。但是现在,我需要在linux上开发app。虽然我知道c ++,但自从我真正触及它以来已有好几年了。我几乎没有问题。

  1. 我是否可以使用单声道和编译二进制文件为Linux和Windows编写代码(或最少)代码更改?
  2. 我可以使用visual studio 2012在windows平台上开发,在windows平台上编译linux吗?我是否需要使用虚拟机在Windows平台上编译linux?
  3. 如果你想在Windows平台上开发linux应用程序,你如何设置你的开发环境(在windows上开发,为linux和windows编译。我的linux盒用于测试是一个单独的机器。)
  4. 关于我正在做什么的一些信息。 我的项目是关于网络渠道分析。客户端是廉价的工业linux盒子,很可能没有ui。我使用mono / c#来开发客户端。服务器将使用vs2012 c#进行windows开发。最有可能使用wpf作为ui。我打算在linux(客户端)和windows(服务器)之间共享网络/通信库。使用linux的主要问题是节省成本,因为客户端几乎是几千个单位。

    谢谢。

3 个答案:

答案 0 :(得分:3)

Mono以PE(可执行文件)格式(Windows的本机文件格式)运行可执行文件。只要您的应用程序是纯MSIL,就没有必要“为Linux编译”。即使你通过p / invoke使用本机DLL,Mono和Wine也可以在Linux上运行Windows文件。

(本机Linux应用程序使用的a.out和ELF可执行格式没有存储.NET元数据的机制,PE格式被修改为支持.NET,因此这就是.NET Framework(不是Micro Framework)的实现无论平台如何使用)

答案 1 :(得分:3)

一开始要考虑的最重要的事情是,

  • Mono的WinForms存在问题。不仅大多数第三方控件无法正常工作,而且libgdiplus本身也不能与Microsoft的GDI + 100%兼容。它似乎是一个甜蜜的选择,但是后来你可能仍然需要努力对抗不兼容性。
  • WPF不是一个选项,因为Mono尚不支持它。
  • GTK#是UI的最佳选择,它与Linux发行版自然融合。如果您正确地重构Windows项目,您应该能够在Windows和Linux解决方案之间共享非UI代码。这就是Mono的推荐(不仅使用Windows,Linux的本机UI框架,还使用Mac / MonoMac,iOS / Xamarin.iOS和Android / Xamarin.Android)。

回到你的问题,

  1. 您永远不应希望对现实世界的项目进行任何代码更改。不,那是不可能的。正如我之前所说,你有机会分享大部分非UI部分。
  2. 您可以使用VS2012开发非UI部分和仅Windows部分,并在Windows上测试它们。如果您计划使用Mono的WinForms或GTK#,则必须使用MonoDevelop在Linux上进行开发和调试。因此,您需要Linux的虚拟机或物理机。
  3. 对我来说,我经常在Linux / MonoDevelop和Windows / VS之间切换。
  4. 由于Mono + C#比使用C / C ++更有效率,许多成功的Linux应用程序都是在Mono上开发的,例如Banshee和Tomboy。

答案 2 :(得分:0)

您可以毫无问题地使用Visual Studio,但例如,您无法使用WPF,而Windows窗体则可以。有关您可以使用的更多信息,请访问:http://www.mono-project.com/Compatibility

此外,还存在与VS集成的Mono工具:http://www.mono-project.com/GettingStartedWithMonoTools