我考虑使用Java,因为它类似于C#,相对容易上手,而且我可以使用JVM。
您应该熟悉Mono 项目和MonoDevelop;这些项目的主要目的是允许在各种平台上构建和运行 .NET 代码,包括 Windows、Linux 和 Mac OSX。
由于 Mono 是 .NET 的重新实现,因此它总是稍微落后于 Microsoft.NET,但他们已经很好地覆盖了 .NET 2.0 和一些 .NET 3.x 特性。请注意,Mono 执行 .NET 二进制文件,因此只要您的程序功能受到 Mono 的支持,您就可以将在 Windows 上编译的应用程序 EXE 在 Linux/Mono 上运行而无需重新编译。
最好使用一些跨平台工具包来编写。很可能你将无法使用漂亮的可视化设计工具(取决于你选择哪种工具包),但是手写UI并不是非常困难。HTML开发人员一直在这样做,而且在非微软世界中也是相当普遍的做法。
一些带有.NET绑定的跨平台UI工具包
一条建议。跨平台编程就像跨浏览器编程一样,唯一确定的事情是在您想要支持的所有平台上进行测试、测试和测试。
我最近在Linux上编写了一个小的C# GUI应用程序,使用mono进行编译和运行。我发现我必须使用"gmcs"编译器才能访问现代C#和.Net功能(mono 1.9附带了几个不同的编译器)。
在编译.exe文件时,我发现我必须添加"-target:winexe"开关,以使应用程序在Windows上运行而不需要在应用程序后面弹出命令行。
我还没有找到如何编译一个在Windows上可以从网络驱动器运行而不需要在PC上进行特殊的.Net安全配置的.Net应用程序。(我认为这是.Net应用程序的一般问题,但我仍在学习中。)
http://www.cornetdesign.com/2006/07/nunit-gui-running-green-on-monolinux.html