5

我有多年的微软开发堆栈开发经验,主要是 Visual Studio 2012/C#。但是现在,我需要在 linux 上开发应用程序。虽然我知道 c++,但自从我真正接触到它已经有好几年了。我有几个问题。

  1. 我可以在没有代码(或最少)代码更改的情况下使用单声道开发并为 linux 和 windows 编译二进制文件吗?
  2. 我可以使用 Visual Studio 2012 在 Windows 平台上开发,在 Windows 平台上为 linux 编译吗?我需要使用虚拟机在 windows 平台上为 linux 编译吗?
  3. 如果你想在windows平台上开发linux应用程序,你如何设置你的开发环境(在windows上开发,为linux和windows编译。我用于测试的linux盒子是一台单独的机器。)

关于我正在做什么的一些信息。我的项目是关于网络渠道分析的。客户端很可能是没有 ui 的廉价工业 Linux 盒子。我使用 mono/c# 来开发客户端。服务器将是使用 vs2012 c# 开发的 windows。最有可能使用 wpf 作为 ui。我计划在 linux(client) 和 windows(server) 之间共享网络/通信库。我对使用 linux 的主要关注是节省成本,因为客户端几乎是一千个单位。

谢谢你。

4

3 回答 3

4

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

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

于 2013-08-28T05:44:01.663 回答
3

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

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

所以回到你的问题,

  1. 你不应该希望真实世界的项目没有代码更改。不,那是不可能的。正如我之前所说,您有机会分享大多数非 UI 部分。
  2. 您可以使用 VS2012 开发非 UI 部分和仅 Windows 部分并在 Windows 上进行测试。如果您打算使用 Mono 的 WinForms 或 GTK#,则必须使用 MonoDevelop 在 Linux 上进行开发和调试。因此,您需要 Linux 的虚拟机或物理机。
  3. 对我来说,我经常在 Linux/MonoDevelop 和 Windows/VS 之间切换。

由于 Mono + C# 比使用 C/C++ 更高效,许多成功的 Linux 应用程序都是在 Mono 上开发的,例如 Banshee 和 Tomboy。

于 2013-08-28T08:35:51.767 回答
0

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

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

于 2013-08-28T04:35:33.677 回答