在OSX和Mono上使用c#进行开发

本文关键字:开发 OSX Mono | 更新日期: 2023-09-27 17:53:27

我即将开始一个项目,需要我写c#代码。问题是,我有一台mac。

我想知道在OSX 10.6上使用mono进行c#开发是否有任何陷阱

我认为页面上很清楚实现是清晰的,但另一方面,我读到人们安装VMWare或类似的东西来使用Windows。如果可能的话,我想避免。

注意

我将在一个团队和所有的其他人用的是Windows电脑

谢谢

在OSX和Mono上使用c#进行开发

根据您对HiVoltRock的回答的评论(ASP。. NET开发),我想说Mono 2.10.1和MonoDevelop会很好(MonoDevelop的稳定版本工作得很好,但对于OS X上的开发,我更喜欢使用我从Git编译的最新版本)。

有一些事情需要考虑,比如文件路径(例如:如果windows开发人员正在编写静态路径,如ApplicationsInstallDirectory + "'data'templates'foo.bar";,您将遇到问题,因为Mac OS上的目录分隔符是正斜杠)。此外,如果现有代码正在使用P/Invoke或其他特定的窗口功能,您将遇到麻烦。

最后,如果你的代码库使用需要Windows的第三方库,这可能会给你带来问题。

作为参考,我们的产品从设计的第一天起就要求它在Linux或OS x的Mono上运行。考虑到这一点,我们确保考虑到跨平台执行的一切。如果你加入一个现有的产品,可能没有考虑到同样的问题,这意味着很多现有的代码与Mono不兼容。

Mono Migration analyzer将帮助您确定是否有任何不兼容的代码。

有一些关于在Mono下开发的资金。我们的项目是一个带有Razor的MVC3,运行。net 4,使用NHibernate, StructureMap等,在非windows机器上开发还没有那么多问题。

请注意,Microsoft的。net库和Mono中的实现"大多数时候"是兼容的。如果你在一个团队中工作,你可能会遇到一些与这些兼容性问题相关的头痛问题(同样,如果你正在编写的任何。net应用程序使用任何第三方插件,你也可能会遇到问题)。如果你不想运行虚拟机,我就直接去Windows上训练。如果你非常习惯OSX UI,它可能会扰乱你的流程,但如果你的团队其他成员使用Windows,我会这样做,只是为了避免兼容性问题。

我在Mono上开发的最重要的东西(当然是在Linux上)是gui。大多数没有gui的代码都可以正常运行。我唯一要做的就是捕捉几个不同的异常。然而,gui将是一个完全不同的野兽,所以不要指望它们能很好地翻译。

我强烈建议通过vmware使用windows,而不是尝试使用一些不稳定的osx程序进行编码。在mac上写了几个小时的代码,然后意识到你的代码在任何windows机器上都不起作用,或者gui看起来和你的电脑完全不同,这一点都不酷。总是针对正确的问题选择正确的工具和语言。此外,visual studio在大多数情况下都非常适合使用。

我遇到过一些奇怪的情况,在Windows上编译的代码出现内存泄漏和段错误,然后原样放到Mono Linbox上。我也有问题编译。csproj文件与xbuild有一些MS怪癖,xbuild不熟悉。

如果我没有弄错的话,这两个编译器有时做的事情略有不同,这与运行时的细微实现差异有关。这很可能是我遇到的段错误和内存泄漏的原因。

我的底线是,在与运行时相同的平台上编译。所以对于本地测试,你应该没问题(你在mac上用mono编译,在mac上用mono运行/测试)。但是不要在mac上构建项目,然后将生成的Mono二进制文件发布到运行MS . net运行时的Windows服务器上(反之亦然)。如果你有一个构建服务器,最好是坚持这样做(无论如何我们都应该这样做……对吧?)。

如果你的团队没有构建过程,你必须构建你将要发布的二进制文件,我建议使用Windows VM来完成最后一步。