移植C#代码以在OSX上运行

时间:2011-09-26 23:27:27

标签: c# .net macos mono

我们有一个在.NET 3.5中运行的控制台应用程序。它连接到USB设备并吐出从中接收的数据。

我想将此移植到OSX,并对此策略有一些疑问。 USB驱动程序已安装在OSX上。

Mono看起来很有希望,但我不明白。最终用户是否必须安装Mono或运行某些东西?

看了一些其他的帖子后,似乎你可以编写一个bash脚本并做一些黑客程序来安装程序......但我找不到一个非常好的解释。它似乎也不会在这个过程中安装mono。这些帖子也来自'09,所以我想知道是否有什么变化让这更容易。

我的问题是,有什么方法可以将C#控制台应用程序运行/移植到OSX。

2 个答案:

答案 0 :(得分:4)

.NET在所有平台(包括Windows平台)上编译为IDL(字节码)。然后在CLR(公共语言运行时iirc)上运行,这与Java虚拟机的概念类似。在大多数Windows机器上,默认情况下安装此CLR就是这样。因此,如果您希望应用程序在另一个平台上运行,则首先需要为该平台提供CLR。 Mono确实包含一个可以在OSX上运行的CLR。因此,无论是您(作为软件包/软件包的一部分)还是用户都需要在.NET运行之前安装它。

您遇到的另一个问题是.NET还包含某些API,这些API不是您的应用程序可能使用或不使用的ECMA标准的一部分。其中一些API以单声道存在,其中一些不是。那些通常没有相同或类似的API,你可以使用它来实现相同的东西,但你可能需要改变你的应用程序来处理这种情况。

这实际上取决于您的应用程序使用的.NET API,以及端口的难度。我猜你可能正在使用winforms作为你的应用程序的一部分,所以这里是来自单一站点的API的那部分指南

http://www.mono-project.com/Guide:_Porting_Winforms_Applications

答案 1 :(得分:0)

您可以将Mono安装程序与您的应用程序(或您自己的Mono版本)捆绑在一起。您甚至可以选择将单声道运行时静态链接到Mac上的应用程序,我不记得是否支持它。我很确定你可以。

另外,wrt gordatron的警告,如果你使用Path.Combine()来创建路径而不是硬编码\作为你的路径分隔符(你应该这样做),你不必担心有文件系统路径问题。

为了检查您的应用是否使用Mono中没有的任何功能,您可以使用http://www.mono-project.com/MoMA检查不受支持的方法/类以及任何其他可能非跨平台的阻止程序,例如p /调用。

对于控制台应用程序,我没有看到您遇到很多问题(尽管您可能需要以与Windows相同的方式与USB硬件接口)。