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


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

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

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

注意

我将在一个团队和所有的团队中工作   其他人有Windows机器

谢谢


7207
2018-04-25 23:24


起源

如果您没有使用任何特定于Microsoft的技术,我不会担心。 - Gabe
如果您使用的是Microsoft特定技术,那么您确实需要沿着VM路线前进 - Peter M
你们对MS特有的意思是什么?的WinForms? - Pablo Fernandez
WinForms支持已经在Mono中存在了一段时间(mono-project.com/Winforms) - Michael Shimmins
P / Invoke,WPF,MSMQ - 看看 mono-project.com/Compatibility - Michael Shimmins


答案:


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

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

最后,如果您的代码库使用需要Windows的第三方库,则可能会导致问题。

作为参考,我们的产品从第一天开始就被设计为要求它在Linux或OS X上的Mono上运行。考虑到这一点,我们确保考虑到跨平台执行的所有内容。如果您要加入现有产品,可能没有给出相同的注意事项,这意味着许多现有代码与Mono不兼容。

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

在Mono下有一些关于开发的热门话题。我们的项目是使用Razor的MVC3,使用NHibernate,StructureMap等运行.NET 4,并且在非Windows机器上开发的问题并不多。


6
2018-04-26 02:00



还应该提到我们使用Windows和Mac机器的混合。我们在两个环境中使用相同的sln和csproj文件,以及相同的msbuild脚本(尽管Mono使用xbuild来运行它们)。没有任何“单声道人员在他们的项目中添加了一个文件,但忘了将它包含在Windows版本中”或任何令人讨厌的东西。 - Michael Shimmins


请注意,Microsoft的.NET库和Mono中的实现“大部分时间都是兼容的”。如果您在团队中工作,可能会遇到与这些兼容性问题相关的一些问题(同样,如果您使用任何第三方插件来编写任何.NET应用程序,那么您可能也会遇到问题。) 。如果您不想运行虚拟机,我只需将其训练到Windows。如果您已经习惯了OSX UI,它可能会破坏您的流程,但如果团队的其他成员使用的是Windows,我会这样做是为了避免兼容性问题。


4
2018-04-26 00:01



我不打扰Bootcamp。虚拟机为您提供两全其美的体验。 - Michael Shimmins


我在Mono上开发的最大的东西(不可否认是在Linux上)是GUI。大多数无GUI的代码运行得很好。我唯一需要做的就是捕捉一些不同的例外。然而,GUI将是一个完全不同的野兽,所以不要指望那些翻译得很好。


1
2018-04-26 00:52



该应用程序实际上是asp.net的东西。我应该没事吗? - Pablo Fernandez


我强烈建议通过vmware使用windows而不是尝试使用一些不稳定的osx程序进行编码。在Mac上编写数小时代码然后意识到没有任何代码可以在任何Windows机器上工作,或者gui看起来与您的计算机完全不同,并不是很酷。总是为正确的问题选择合适的工具和语言。此外,视觉工作室很适合与大多数时间一起工作。


1
2017-10-01 22:12





我遇到了奇怪的内存泄漏和段错误,在Windows上编译代码并按原样放到Mono Linbox上。我也有问题用xbuild编译.csproj文件,这些文件有一些xbuild不熟悉的MS怪癖。

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

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

如果您的团队没有构建过程,并且您必须构建要发布的二进制文件,那么我将使用Windows VM进行最后一步。


0
2017-08-27 09:21