是在 Mono 跨平台开发吗?

Posted

技术标签:

【中文标题】是在 Mono 跨平台开发吗?【英文标题】:Is developing in Mono cross-platform? 【发布时间】:2010-08-07 06:47:35 【问题描述】:

单声道跨平台开发的标准是什么?如何为 Windows 编译(在 Linux 中),如何在 Linux 中运行(因为没有 .NET JIT 编译器)?

那么用 Mono 开发有什么特点呢?与使用 Visual Studio 开发相比有哪些优势(跨平台的东西除外)?

【问题讨论】:

【参考方案1】:

在 Mono 中开发绝对是跨平台的,警告购买者

尽量避开 Windows 特定的 API 无法与本机 Windows API 互操作...调用 Win32 方法,例如“GetFont”,这是一个假设示例,GetFont 将在 Mono 下返回不存在的字体信息,但是您可以创建一个不返回任何内容的假包装器并合并 #ifdef 宏以使用在 Mono 下编译时封装器,在 Windows 下编译时关闭宏,如何实现封装器取决于您。 不要使用 Mono 中可能没有的高级 GUI 属性。 使用NewLine等Environment属性使其独立于Unix的CR和Win32的CRLF,同样适用于路径分隔符,适用于Unix的'/'和适用于Win32的'\'。 序列化在 Mono 下略有不同,您在 Mono 上序列化一个对象,不要自欺欺人地认为它会在 Win32 下反序列化,反之亦然。

最后但同样重要的是,不断检查从 Mono 到 Win32 并再次返回,不断测试和测试。

【讨论】:

非常感谢您提供的信息。【参考方案2】:

大部分单声道运行时都与 CLR 兼容,因为它们遵循相同的标准。

这意味着一旦你编译了你的代码(在 Mono Visual Studio 中),只要你确保只使用两者都支持的功能(例如 Mono 中没有 WMI 的东西)并编写您的应用程序要具有平台意识,使用最佳实践(例如使用 Path.Combine 构建文件和目录路径,使用 Environment.NewLine 输出新行等),您的应用程序可以在任何具有 Mono 或CLR(包括 Windows、Linux 和 Mac)。

您可以在 Visual Studio 中使用单声道进行开发,因此您的问题部分没有实际意义。

【讨论】:

所以如果我用 Mono 编译,我也可以用 .NET 运行,还是我仍然需要在 windows 上安装 Mono? 再一次,只要您保留两个运行时都具有的功能,答案是您不必安装 mono 即可在 Windows 上运行它。【参考方案3】:

Mono 本身是跨平台的。

通过专门使用单声道进行开发,您将能够在任何支持单声道的平台上运行您的可执行文件。与在 MSFT 的 .Net 平台上开发相比,这本身就是 mono 的最大优势。换种说法:如果您使用 mono 构建您的程序集,则可以保证跨平台支持,而使用 .Net 构建可能无法提供。

Mono 对 .Net 中的缺陷进行了一些升级(例如 Mono.security 提供了 .Net 2.0 中没有的功能,尽管我相信 MSFT 会在以后的版本中采用它们)。

可以使用 Visual Studio 构建 .Net 程序集并让 Mono 运行它,但是您的程序集必须注意仅使用 Mono supports 的框架/库,以及您的程序集引用的任何非托管程序集可用于您选择的操作系统。换句话说:如果您的程序集在 Windows 上使用 C++ dll,您必须确保您拥有适用于 linux 的正确 .a/.so 文件。

要在 Linux 中运行 .net 程序集(假设 mono 已正确安装),请键入:mono myprogram.exe

【讨论】:

所以如果我用 Mono 编译,我也可以用 .NET 运行,还是我仍然需要在 windows 上安装 Mono? 如果您使用单声道编译,并且您的程序集使用不属于标准 .NET 框架的特定单声道库,那么是的,您需要安装 Mono。 系统库算跨平台吗? 没有.Net 库是跨平台的。我想你想问的问题是“系统库是用单声道实现的吗?”答案是肯定的。系统完全支持。【参考方案4】:

在 Mono 上开发的唯一优势是您可以使用 Mac OS X 或 Linux 环境。但如果你有选择,永远不要离开 Visual Studio。 据我所知,Visual Studio 是可用于 C# 和 VB 开发的最佳 IDE。

【讨论】:

这根本不是真的。如果您使用 Visual Studio 进行开发,您可以使用 Mono 在 mac 和 linux 上运行您的可执行文件(前提是您的 exe 使用 Mono 支持的 .Net 库)。 '它是最好的 IDE'...希望你不想引发一场激烈的战争。 @dkson 我从不想发动任何形式的战争。句子变了。谢谢! 只要C#是微软的,Visual Studio是.Net和C#的唯一官方工具,我认为@BennySkogberg是对的。 @Andrei:实际上这不是真的。 Microsoft 还拥有 CSC,即 C# 命令行编译器,它随 .NET Framework 一起提供,无需安装 Visual Studio 即可使用。甚至 MSFT 也提到了 Mono 作为一种工具:msdn.microsoft.com/en-us/library/ms379563%28VS.80%29.aspx

以上是关于是在 Mono 跨平台开发吗?的主要内容,如果未能解决你的问题,请参考以下文章

Nancyfx跨平台开发总结简介

Windows 上 Mono 的意义何在

使用Mono将C#编译运行至WebAssembly平台

Xamarin.iOS开发初体验

dotnet 使用 XWT 构建跨平台客户端 入门篇

Mono为何能跨平台?聊聊CIL(MSIL)