正在开发Mono跨平台?

时间:2010-08-07 06:47:36

标签: c# windows linux mono

采用单声道跨平台开发的措施是什么?我如何编译Windows(在Linux中),如何在Linux中运行(因为没有.NET JIT编译器)?

那么使用Mono开发的特点是什么?使用Visual Studio开发有什么优势(除了跨平台的东西)?

4 个答案:

答案 0 :(得分:28)

在Mono中开发绝对是一个与警告的经纪人的跨平台:

  • 努力避开Windows特定的API
  • 没有与本机Windows API的互操作性......或者......您可以#ifdef出Windows API并提供您自己的Mono包装器以最小化代码更改,例如,有一个使用的DLL包装器Interop调用Win32方法,如'GetFont',这是一个假设的例子,GetFont将在Mono下返回不存在的Font信息,但是你可以创建一个不返回任何内容并包含{{1}的假包装器。在Mono下编译时使用包装器,在Windows下编译时关闭宏,如何实现包装器取决于你。
  • 请勿使用Mono中可能不存在的高级GUI属性。
  • 使用环境属性(如#ifdef)使其独立于Unix的CR和Win32的CRLF,同样适用于路径分隔符,适用于Unix'/'和Win32'\'。
  • 序列化在Mono下略有不同,你在Mono上序列化一个对象,不要自欺欺人地认为它会在Win32下被反序列化,反之亦然。

最后但并非最不重要的是,继续检查从Mono到Win32再返回,继续测试和测试。

答案 1 :(得分:3)

大多数单声道运行时与CLR兼容,因为它们遵循相同的标准。

这意味着一旦你编译你的代码(在Mono visual studio中),只要你确保只使用两者支持的功能(例如单声道中没有WMI东西)和写您的应用程序具有平台感知能力,使用最佳实践(示例使用Path.Combine构建文件和目录路径,使用Environment.NewLine输出新行等),您的应用程序可以在任何平台上运行Mono或CLR(包括Windows,Linux和Mac)。

你可以在视觉工作室中使用mono进行开发,因此关于这一点的部分问题没有实际意义。

答案 2 :(得分:2)

Mono本身就是跨平台。

通过使用mono进行专门开发,您将能够在任何具有单声道可用功能的平台上运行您的可执行文件。与在MSFT的.Net平台上开发相比,这本身就是单声道的最大优势。换句话说:如果你用单声道构建你的程序集,你就可以保证跨平台的支持,因为.Net的构建可能不会给你。

Mono已经对.Net中的缺陷进行了一些升级(例如,Mono.security提供了.Net 2.0中没有的功能,但我相信MSFT会在以后的版本中选择它们)。

可以使用Visual Studio构建.Net程序集,并让Mono运行它,但是程序集必须注意只使用Mono supports的框架/库,以及由...引用的任何非托管程序集。您的程序集可用于您选择的操作系统。换句话说:如果你的程序集在windows上使用了C ++ dll,你必须确保你拥有正确的.a / .so文件。

要在Linux中运行.net程序集(假设已正确安装mono),请键入:mono myprogram.exe

答案 3 :(得分:1)

在Mono上开发的唯一优势是您可以使用Mac OS X或Linux环境。但是,如果您有选择,请永远不要离开Visual Studio。 据我所知, Visual Studio是可用于C#和VB开发的最佳IDE。

相关问题