使用Mono进行C#开发的可行性

12

最近在Ubuntu Linux上我接触到了Mono和MonoDevelop软件包。他们声称具有符合CLI标准的.NET运行时。在自己安装这些软件包之前,我想知道以下内容:

  1. Mono有多强大?

  2. 我能否像为Windows开发WinForm应用程序一样,为Linux开发GUI应用程序。

  3. MonoDevelop IDE是否与Visual Studio IDE兼容?我能否将VS 2008解决方案导入MonoDevelop并进行工作?

  4. 它支持.NET 2.0及以上版本吗?

编辑:增加一个疑问

是否有办法在Linux中运行.NET exe(WinForm应用程序的)而不需要在Linux上构建代码?事实上,我没有一些早期开发的小型实用程序的代码,希望在Linux中运行它们。

7个回答

6
  1. (奇怪,markdown从1开始枚举,即使我从2开始...)

  2. 是的,你可以,但是由于内部实现不同,第三方组件受到限制。上次我检查(不久以前),Mono WinForms实现使我的测试应用程序看起来相当奇怪(自绘列表视图)。虽然Mono声称现在完全兼容WinForms-2.0,但并不推荐这样做。

  3. MonoDevelop是SharpDevelop的分支,后者具有解决方案支持。我不知道MonoDevelop是否具有此功能。但是很酷的是,你可以使用Visual Studio进行开发,并在Mono上运行编译后的应用程序。而且,Mono也适用于Windows。

  4. 是的,它确实如CLR所述。正如Marc Gravell已经写过的那样,缺少Windows Foundation库(例如System.Management等)。但大多数情况下应该能够正常工作,包括ASP.NET 2.0。Mono的应用程序可移植性指南对此是一个很好的参考阅读。


2

1:实际上相当不错。并非所有完整框架都在那里,因此,如果您要编写应该在MS .NET和mono上构建的代码,则需要早期针对两个平台进行构建和测试。

4:是的-尽管像WPF / WCF / WF(3.0)这样的东西缺失或减少了。

关于开发环境,我不太清楚,因为我使用VSTS(在Windows上),只需使用NANT脚本在mono上进行构建即可......


2
  1. 请定义“强大”。
  2. Mono拥有WinForms实现,可实现一定程度的源代码兼容性。但是,根据您的需求,您可能希望使用Mono绑定到Linux本地框架之一,例如Gtk#Qyoto
  3. 不得而知。
  4. 这取决于您所指的.NET的哪些部分。 C#语言似乎非常流行,越接近企业级功能就越模糊,正如先前所提到的。

总之,如果您将Mono用作单独的目标平台,则可能会获得良好的结果。如果您想要一个无需更改代码的.NET兼容性层,则效果可能较差。


1
  1. 非常强大。核心实现中没有重大错误。它不是一个科学项目。缺陷主要在于最新的API(Microsoft本质上具有先发优势)。

  2. 是的。我们刚刚完成了一个项目,其中大部分GUI代码是在Windows上使用WinForms开发的。我能够在Ubuntu上工作而没有遇到重大问题。尽管如此,这仍然是API中最难的部分之一,并且仍然存在问题。请参见http://mono-project.com/WinForms获取详细信息。

  3. 不知道,因为我不使用它。
  4. 是的,尽管再次提醒,运行时可能会缺少一些API。

注意,我使用的是Ubuntu Hardy(8.04)。


"没有重大问题"? 那是可疑的 - 我记录了一系列编译器错误等等...现在都已经解决了,但就像所有开发项目一样:bug总是难免的... - Marc Gravell
我也记录了一些错误。当我说严重的错误时,意思是致命错误。 - Matthew Flaschen

1
  1. Mono非常强大。它在一个非常强大的开源框架上拥有所有的.Net功能。

  2. 当你说“为Linux开发GUI应用程序就像为Windows开发WinForm应用程序”时,我理解你是在询问一个可视化设计工具,让你快速创建UI。是的,这是可能的。MonoDevelop有Stetic——一个内置的Gtk#可视化设计工具。还有QyotoDevelop,它使QT支持MonoDevelop。

  3. 是的,MonoDevelop本地支持VS项目/解决方案文件格式。你可以使用相同的代码库,在Windows上使用VS的.Net编译你的应用程序,在Linux上使用Mono中的MD。

  4. 目前,Mono支持C# 3.0,并已实现一些超出此范围的功能,还有很多正在进行中。

  5. 是的,在许多情况下,运行.Net编译的应用程序在Mono中是可能的,但是由于MonoDevelop对VS解决方案的支持,这并不重要。只需按F7重新构建整个项目,所以付出的努力真的微不足道。检查你的应用程序是否可以在Mono中运行的最佳工具是MoMA


0

0

我在Mono中使用WinForms。2.x版本非常好。

我在Windows上使用Visual Studio开发表单,在Linux上运行它们,而且不需要任何代码更改。是的,表单看起来与XP上的有些不同,但是再说一遍,在GNOME中使用XP主题的GUI会显得有点奇怪。

如果您刚开始学习,请在熟悉Mono / Linux之前坚持使用WinForms。然而,某个时候您可能想要调查GTK。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接