是否有支持在Mac上本地运行.NET 4.0应用程序的方法?


11

Microsoft在Mac上原生运行C#/。NET 4.0代码的受支持的选项是什么(如果有)?是的,我知道Mono,但除其他外,它落后于Microsoft。而且Silverlight仅在Web浏览器中有效。VMWare类型的解决方案也不会削减它。

关于Microsoft为什么不直接在Mac本身上支持.NET的问题,是否有半权威性的答案?似乎他们可以Silverlight和/或购买Mono并很快就在那里。无需本地Visual Studio;交叉编译和远程调试很好。

原因是在我工作的地方,对未来的不确定性越来越大,这导致用C ++而不是C#进行更多开发。全新的项目正在选择使用C ++。从现在起18到24个月没有人告诉管理层“抱歉”,如果Mac(或iPad)成为必需品。C ++被视为更安全的选择,即使它(可以说)意味着当今生产力的下降。


2
由谁支持?

您为什么真正关心MS是否支持呢?如果要以Mac为目标,则IMO如果Apple支持,则应该更重要。
备用

使用C ++并不是一个坏主意。您可以拥有一个可移植的代码库,并在每个平台上使用本机GUI。
mike30

1
要更新此帖子,似乎MS已经注意到它,并且他们将开始在不同的操作系统上支持.NET,尽管目前尚不清楚如何实现。您可以使用NOV使用.NET创建跨平台应用程序:nevron.com/products-open-vision.aspx(我在这家公司工作)。它通常允许您在Windows上使用C#进行编码,然后针对Wpf,MAC,Silverlight进行编译,并很快针对iOS和Android进行编译。该产品有一个免费(社区)版本,因此无需牺牲生产力并坚持使用Arcane C ++。
鲍勃·米兰诺夫

Answers:


17

为什么Microsoft本身不支持Mac上的.NET,有什么半权威性的答案?

最好的答案可能是您在Mac上不只是“支持” .NET。您需要花费数亿美元和数年的时间才能将.NET移植到Mac。

虽然有些东西是完全托管的,不需要移植,但大多数东西都是Win32 API的包装器(Windows,控件,gdi +,加密,活动目录,COM,企业服务,设备访问,声音,视频,编解码器,winform等),等等)。

其中的每一个都必须在后端进行抽象,然后重新映射到OSX上的等效本机库。当然,不会有一个很好的清晰映射,因此您还必须编写一些hacks才能使其功能完全相同。

然后是一个问题,OSX上的这些API可能很脆弱,并且Apple不能很好地向后兼容,因此您必须在每个主要版本(有时是次要版本和修补程序)上重做黑客,这会增加高昂的维护成本。

基本上,这是一笔巨款,在一个平台上的收益很小,而平台的所有者反正会反对您这样做。而且,您真的不想花钱来帮助人们从您自己的平台迁移到竞争对手的平台。

因此,您将获得不完美的跨平台选择:

  • C ++,将来仍然需要移植
  • Silverlight脱离浏览器,用于Microsoft支持
  • Mono,其工作是为了支持健康的.NET子集,但不是Microsoft

5
You spend hundreds of millions of dollars and several years porting .NET to the Mac.劳驾?这个数字听起来有点高...我很确定Mono-framework(支持更多操作系统)并不会花费那么多。
鲍比(Bobby)

1
@Bobby:这就是我的想法。Mono + Silverlight似乎是其中的大部分方式。再加上一些P / Invoke和/或C ++ / CLI,用于不太主流的内容(密码学,AD等),我认为您会以合理的成本获得一个相当合理的解决方案。我的观点是,微软确实希望花钱帮助人们使用OSX。如果不这样做,人们将停止在Windows上使用C#/。NET。
2011年

@丹:确实,微软不想与世界兼容,否则世界可能会使用不同的东西。;)
Bobby

15
Mono框架也不是一个完整的,经过全面测试的,有文档记录的,受支持的解决方案。开放源代码的“足够好”和人们对Microsoft期望的质量有所不同。要达到用户所需的水平,这很容易使他们花费数亿美元。他们可以减少投资的方法是挑选一个.NET框架的流行的(可移植的)子集,然后执行。他们就是这样做的,他们称之为“ Silverlight”。
jpobst 2011年

@jpobst,但看起来MS已经做到了……还有更多?
-14

14

不,Silverlight是OS X上来自.Net 的唯一Microsoft选项。Mono并没有您想象的那么“滞后”。例如,它支持.Net 4.0和C#4。但是,OS X上不很好地支持UI工具包(WinForms和WPF)。Mono根本不支持WPF。如果不重写整个渲染引擎,Microsoft也不可能。不过那可能还可以。如果要编写本机Mac应用程序,则应编写本机UI(也许使用MonoMac)。


管理似乎不太愿意与Mono选项一起使用。当然,它与Windows(或Windows)在同一天不支持.NET 4.0。
2011年

Silverlight早已不是WPF(类似)前端上的大部分功能吗?是的,XAML需要有所不同才能获得Mac外观。
2011年

2
@Dan:这些天Mono的移动方式,如果您在Microsoft发布它时开始为最新版本的.NET开发应用程序,那么Mono会在准备好发布时支持该版本。
Anon。

隐藏的@Dan SL和WPF试图尽可能地合并。虽然存在技术差异,但基本概念是跨平台的。
亚伦·麦克弗

6
如果您的公司管理层不愿意使用Mono,那么您将无法使使用传统C#4.0编写的桌面应用程序变得如此简单。
Ramhound


4

Silverlight 不仅浏览器。由于版本3 OOB已经存在,并且如果必须使用Microsoft支持的平台,那么它将成为我要采用的方法。

尽管Mono可能会滞后,但它并没有像您想象的那样从.NET堆栈中删除,因此不应作为可行的选择而抛在一边。

至于微软为什么不实现整个.NET堆栈;投资回报率。


但是似乎他们与Silverlight是如此接近...为什么不仅仅完成工作呢?这似乎好多了,每个人比单逆向工程的编译器,CLR等
Ðаn

1
SL并不是整个.NET堆栈。SL运行时与整个.NET堆栈完全不同。
亚伦·麦克弗

是的,但是既然您已经可以按照SL的建议进行OOB之类的工作,为什么移植.NET堆栈的其余部分(1/3或40%?)呢?还是SL真的无非是企图杀死Flash?
2011年

@Dan当公司将事物推到云中时...您要做的最后一件事是将无法在云中运行的堆栈移植到云上。SL可以跨浏览器运行。您可以与Google等其他公司争辩说,在浏览器中工作的推动是真实的。为什么此时您为什么会选择将整个堆栈移植到市场份额小于10%的操作系统以及当今如此流行的虚拟化呢?
亚伦·麦克弗

微软(可以说)拥有当今可用C#和.NET最好的开发环境。但是由于围绕Mac / iPad / cloud / etc的不确定性,像我这样的公司将越来越回避它。C ++似乎更安全。
2011年

3

微软的大部分利润来自两种产品-Windows和Office。跨平台兼容性会损害Windows。

如果您确实希望跨平台运行相同的代码,请编写一个Web应用程序。听起来不像您那样。“以防万一”不是一个很好的理由,这是范围的蔓延。

即使您决定从现在起的16个月内将Mac OS X或iOS定位为目标,您是否真的认为您可以采用现有的C ++代码并将其转变为良好的(甚至功能正常的)本机应用程序?除非您正在制作全屏游戏,否则答案是否定的。

立即节省使用C#的时间,如果您决定使用Mac,请使用Objective-C和Cocoa用Mac方式重写它-您的用户将感谢您。


1
“以防万一”是现实;当C ++中有一个更安全的选项时,没人愿意告诉管理层“哎呀”。
2011年

1
假设接口代码正确分开,将C ++代码移到Mac上会更容易。使用Cocoa在Objective-C中重写接口,链接到其余接口,您就完成了很多工作。
David Thornley

@David:因此,这个问题背后的问题是:更多的C ++,更少的C#。我(真的)喜欢C#!
2011年

这些跨平台问题就是为什么我们许多人仍然使用Java而不是使用C#。
Brian Knoblauch

1

为什么Microsoft本身不支持Mac上的.NET,有什么半权威性的答案?

哪些市场可以证明MS花费宝藏对其进行编码是正确的?为了做到这一点,他们必须丢掉大量现金-数百万美元的薪水。随着修复程序和更新的不断进行。

为了什么 吹牛的权利?他们得到的所有好处就是人们可以放弃Windows for Apple,仍然能够运行他们的应用程序。

如果有人从中受益,那就是苹果。使人们更容易过渡到其平台,并使开发人员(DEVELOPERS DEVELOPERS)可以在其上进行编码。但是您认为SJ会胡扯吗?他们宁愿发明新的东西来坚持我的立场。此外,大多数框架是OS,CLR规范对任何人都是免费的。您不能在任何一个上面贴上肮脏的NDA。


“ Microsoft要做的事情”的一部分是使人们在Windows上使用他们的一流工具。C#/。NET的运行方式将降级为内部应用程序。多年来一直使用C#的开发人员正在再次编写C ++。至于费用;看起来Silverlight和/或Mono已经达到了大约2/3。
2011年

Mono是一个开放源代码平台,尽管.NET的源代码已发布,但.NET Framework不是开放源代码。出于多种原因,微软将无法购买Mono,主要的原因是他们没有一个100%的开源应用程序。您知道吗,Silverlight在.NET中只是一种语言,因此它是多平台的,因为Microsoft希望它可以替代Flash。我还应该补充一点,苹果已经做出努力,甚至不允许在其操作系统上使用某些东西。
Ramhound

1
@Dan听起来好像解决您的难题的方法不是“用一种语言来解决所有问题”,而是“我们如何以与平台无关的方式进行部署”。大多数人通过打破逻辑上的UI,将每个UI嵌入每个平台,将另一个作为服务嵌入内管来实现此目的。
扯掉

1
@Dan我有一个解决方案...不要为Mac编写代码。我有一个个人的非苹果开发协议,并亲自签署。我完全讨厌无法编写C#,因此避免这样做。但是有时您必须做自己想做的事情,如果希望是鱼,我们将不得不考虑其他一些说法来描述我们想要但不能拥有的许多事情。
扯掉

1
@Dan kindasorta。他们还没有真正接触过桌面。但是我对五年的变化感到惊讶。
扯掉

0

您可能会发现MonoMac项目很有用- //www.mono-project.com/MonoMac

它允许开发可可应用程序Mono风格,可以将其部署到Mac App Store中。

对于那些不熟悉Objective-C但又需要在限时方案中交付应用程序的.NET / Mono / Java开发人员,我将强烈考虑这种方法。


0

没有。

我建议您编写一个可交叉编译的C ++应用程序(可能会让您满意)或将Ruby与wxWidgets一起使用。

我认为.NET对于跨平台开发和长期产品维护来说是一个不好的主张。尽管,您可以在其中快速完成应用程序。:-/

希望德尔福仍然是主要竞争者。


1
听说过拉撒路吗?
快乐编码员

另外,Java的负责人吗?
费尔南多·冈萨雷斯·桑切斯,

0

如果要在Mac上本地运行.NET,则可以使用BootCamp来执行此操作(即,在Mac上运行Windows,在Windows中运行.NET应用程序)。

如果您指的是Mac OS X,而不仅仅是硬件,那么您可以使用VMWare或Parallels在OS X中的Windows中(以仿真方式)运行.NET应用程序。两者都具有可视模式,可让您的应用程序看起来像仅在运行一样在OS X中(它的外观和行为类似于Windows应用程序,但是如果您为每个OS编写没有自定义界面的跨平台非Web应用程序,则总是会遇到该问题)。

通过这样做,您将获得相同数量的“支持”,因为您是在Windows中运行该应用程序的,尽管它是虚拟的。当然,运行该应用程序的任何人都需要虚拟化软件和Windows的副本,并且愿意忍受不像OS X应用程序那样运行的应用程序-但这是拥有“本机”功能的唯一方法在Mac上运行的.NET。


0

丹,我认为您无法做到。但是,一种可能的解决方案(仍然是蒸气软件)是使用Embarcadero Rad Studio C ++ Builder,它具有用于开发可视化应用程序(基于.net的大部分语言)的很好的VCL,并且由于具有跨平台支持而成为RUMORED在下一个版本中。

这将在Windows上开发,目标是Mac或Linux。大概他们的路线图说。

C ++环境是合理的,如果您是根据VCL开发的,那么从理论上讲,该应用程序将只能在其他平台上运行。

当然,在实际发货之前,还有待观察其实际效果如何。



-3

如果要为OS开发,请使用正确的工具。对于Mac,没有真正的专业用Mono编写的应用程序。另一方面,有许多非专业的开发人员使用大量的工具创建大量的垃圾。查看为OSX编写的mono应用程序评论。开发人员正在使用一个不完整的框架进行编写,该框架被黑以匹配OSX平台。开始写-如果您使用过C#,那么Objective C是一个快速的学习。

Mac的专业开发人员使用C ++,Objective C,Cocoa和Xcode。我在多个平台上开发,每个平台都有自己的最佳工具。在Mac和iOS上使用Xcode。

就像一个旁注一样,Xcode不是Visual Studio,它不那么稳定,相对于Apple而言是一个耻辱,但是当您习惯了他的怪癖时,它就可以很好地工作。很难击败Microsoft的工具-但是它们是为Windows而不是Linux,iOS,OSX,AIX等编写的。


1
您是否有任何事实可以备份“ Xcode不够稳定且对Apple不利”之类的陈述,因为根据我个人的经验,所有使用Xcode的人都喜欢它。除了在表达您对某个主题的个人观点后,您似乎并不熟悉,甚至不知道在2013年,实际上有解决方案。当然,解决方案是实际的MonoXamarin.Mac但这是一个解决方案。Mono的当前版本几乎是.NET 4.0的100%完整实现,它仅缺少几个可能永远不会移植的主要功能(即WPF)。
Ramhound
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.