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

11

我即将开始一个需要编写C#代码的项目,但我的电脑是Mac。

我想知道在OSX 10.6上使用Mono进行C#开发是否存在任何问题。

我认为页面清晰地说明了实现方式很简洁,但另一方面我读到有人安装VMware或类似软件来使用Windows。如果可能的话,我想避免这种情况。

注意

我将与团队一起工作,其他所有人都有Windows机器。

谢谢


2
如果您没有使用任何微软特定的技术,那么您不必担心它。 - Gabe
1
如果您正在使用微软特定技术,则确实需要走虚拟机路线。 - Peter M
你们说的“MS-specific”是什么意思?是指Winforms吗? - Pablo Fernandez
WinForms的支持在Mono中已经存在了一段时间(http://www.mono-project.com/Winforms)。 - Michael Shimmins
1
P/Invoke,WPF,MSMQ - 请查看http://www.mono-project.com/Compatibility - Michael Shimmins
显示剩余4条评论
5个回答

6
基于你对HiVoltRock回答(ASP.NET开发)的评论,我会建议使用Mono 2.10.1MonoDevelop(稳定版本的MonoDevelop运行良好,但在OS X上进行开发时,我更喜欢使用我从Git编译的最新版本)。
需要考虑一些事情,例如文件路径(即,如果Windows开发人员编写静态路径,例如ApplicationsInstallDirectory + "\data\templates\foo.bar";,因为Mac OS上的目录分隔符是正斜杠,所以可能会遇到问题。此外,如果现有代码使用P/Invoke或其他特定于Windows的功能,则您会遇到麻烦。
最后,如果您的代码库使用需要Windows的第三方库,这可能会导致问题。
值得参考的是,我们的产品从一开始就被设计为在Linux或OS X上的Mono上运行。考虑到这一点,我们已经确保考虑了跨平台执行的所有内容。如果您正在加入现有产品,则可能没有考虑相同的问题,这意味着许多现有代码与Mono不兼容。

Mono迁移分析器将帮助确定您是否有任何不兼容的代码。

关于在Mono下开发,有一些误解。我们的项目是一个MVC3 Razor应用程序,在非Windows机器上运行.NET 4,使用NHibernate、StructureMap等,开发过程中没有太多问题。


3
还需要提到我们使用混合的Windows和Mac机器。我们在两种环境中使用相同的sln和csproj文件,并且使用相同的msbuild脚本(尽管Mono使用xbuild来运行它们)。没有任何“Mono的开发人员向其项目添加了一个文件,但忘记将其包含在Windows版本中”之类的问题。 - Michael Shimmins

4
请注意,来自微软的.NET库和Mono中的实现“大多数时候”是兼容的。 如果您在团队中工作,可能会遇到与这些兼容性问题相关的问题(此外,如果您使用任何第三方插件来编写任何.NET应用程序,则也可能会出现问题)。 如果您不想运行虚拟机,则可以直接启动Windows。 如果您非常习惯OSX UI,则可能会干扰您的工作流程,但是如果您的团队其余成员都在使用Windows,则为避免兼容性问题,我建议这么做。

我不会费心去参加“Bootcamp”。虚拟机为你提供了最好的两个世界。 - Michael Shimmins

1
在 Mono 上开发最大的问题是 GUI(尤其是在 Linux 上)。大多数不含 GUI 的代码都能正常运行,所需处理的只是一些不同的异常。然而,GUI 是完全不同的动物,不要期望它们能够很好地转换。

这个应用实际上是asp.net的东西。我会没问题吗? - Pablo Fernandez

1
我强烈建议使用vmware来运行windows,而不是使用一些不稳定的osx程序进行编码。在苹果电脑上编写代码数小时后,却发现你的代码在任何Windows机器上都无法工作,或者GUI看起来完全不同于你的电脑,这并不酷。始终选择适合问题的正确工具和语言。此外,Visual Studio大多数时候也很好用。

0

我曾经遇到过一些奇怪的内存泄漏和段错误问题,这些问题是在Windows上编译的代码直接放到Mono Linbox上运行时出现的。我还遇到过使用xbuild编译.csproj文件时出现了一些MS怪癖,xbuild并不熟悉。

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

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

如果你的团队没有构建流程,你必须构建要发布的二进制文件,那么我建议你使用Windows虚拟机进行最后一步操作。


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