将c#代码移植到OSX上运行

本文关键字:OSX 运行 代码 | 更新日期: 2023-09-27 18:09:38

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

我想把这个移植到OSX上,并且有一些关于这个策略的问题。USB驱动程序已安装在OSX上。

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

在看了一些其他的帖子之后,似乎你可以写一个bash脚本并做一些黑客来安装程序…但我找不到一个很好的解释。似乎mono也不会在这个过程中安装。这些帖子也是2009年的,所以我想知道是否有什么改变使这更容易。

我的问题是,运行/移植c#控制台应用到OSX的好方法是什么?

将c#代码移植到OSX上运行

。NET在包括windows平台在内的所有平台上都被编译成IDL(字节码)。然后在CLR(公共语言运行库iirc)上运行,CLR是一个类似于Java虚拟机的概念。碰巧在大多数Windows机器上默认安装了这个CLR。因此,如果您希望您的应用程序在另一个平台上运行,您首先需要该平台的CLR。Mono包含一个可以在OSX上运行的CLR。所以无论是你(作为你的包/捆绑包的一部分)还是用户都需要在你的。net运行之前安装它。

你的另一个问题是。net还包含某些API,这些API不是ECMA标准的一部分,你的应用程序可能会或可能不会使用它们。这些API中有些是mono的,有些不是。那些没有的通常有一个等效或类似的API,你可以用它来实现同样的事情,但你可能需要改变你的应用程序来处理这种情况。

这真的取决于你的应用程序所使用的。net api,以及移植的困难程度。我猜你可能会使用winforms作为你的应用程序的一部分所以这里是来自mono网站的API部分的指南

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

您可以将Mono安装程序与应用程序(或您自己的Mono构建)捆绑在一起。你甚至可以选择将mono运行时静态地链接到Mac上的应用程序中,我不记得它是否被支持了。我很肯定你能。

另外,根据gordatron的警告,如果您使用path . combine()来创建路径,而不是硬编码'作为路径分隔符(无论如何都应该这样做),则不必担心文件系统路径问题。

一个简单的方法来检查你的应用程序是否使用了Mono不支持的功能,你可以使用http://www.mono-project.com/MoMA来检查不支持的方法/类和任何其他潜在的非跨平台拦截器,如p/invoke。

对于控制台应用程序,我不认为你会遇到很多问题(尽管你可能需要与USB硬件的接口不同于Windows)。