我知道反过来并不一定成立,但如果我的应用程序在Mono上运行良好,那么如果我切换到真正的.NET框架,它是否保证可以正常工作?如果不能,我在哪里可以找到注意事项列表?
Mono和.NET都是ECMA/ISO CLI规范族的超集。但是,.NET和Mono都不是对方的子集。Mono和.NET在ECMA/ISO CLI之上添加了一些功能,但是虽然Mono实现了许多.NET的增强功能,但.NET没有实现Mono的任何增强功能。
以下是一些示例:
但请注意,除了数组之外,所有这些都可以通过它们的命名空间清晰地区分,因为它们都不属于System
或Microsoft
命名空间。
编辑:实际上,上述大部分扩展都是明确设计用于在.NET上工作的。例如,Mono.Simd
也可以在.NET上运行,但由于缺少Mono VM的运行时支持,它的速度非常慢。(基本上,所有SIMD操作都是用C#实现的,但Mono编译器检测到这些调用并将它们替换为相应的汇编指令。这样,它们可以在.NET上工作,但没有特殊处理,它们会明显变慢。)此外,C# REPL目前正在重新实现,以便在未来可以在.NET上工作,它是基于Reflection.Emit
实现的(目前它直接调用Mono编译器)。Gtk# 在Windows和.NET上运行良好。
只有 Mono.Tasklet
库不能在.NET上实现,因为它需要VM级别的支持连续性。
不过,如果你只使用微软定义的类,那么就没有问题了。Mono包括几个可替代的UI框架(Gtk#、wxWindows for .NET等)。
Mono.Tasklet
则不行。 - Jörg W Mittag