Mono是模拟.NET还是只是与.NET语言兼容的框架?

3

比如,如果我在Windows上使用C#和.NET框架编写程序,然后将代码放到运行Mono的Linux机器上,它会完全相同地运行吗?还是我需要重写它以适应Mono的库?

3个回答

5
这要看你的程序是做什么的,以及它是如何编写的。如果你使用了纯C#和核心.NET框架功能,并且这些功能在Mono上得到支持,那么它们将“只需工作”,无需更改。但是,如果你使用不受支持的功能(例如:任何围绕本机互操作或WPF等构建的第三方库),它们将无法正常工作。定期在开发过程中对你的程序集运行Mono Migration Analyzer是一个非常好的主意。这将告诉你任何不兼容性。

一个重要的注意事项是也要直接在Mono/Linux上测试您的应用程序。我有一个应用程序无法通过MoMA测试,但实际上在Mono/Linux上可以运行得很好。我将尝试稍后报告此类虚警。 :) - Lex Li
此外,在 openSUSE Linux 主题下,.NET 应用程序看起来非常不同 :) - Lex Li
1
@Lex:没错(关于外观),但是在XP和主题化的W7桌面上,.NET应用程序看起来非常不同 ;) - Reed Copsey

4

简短回答:这取决于具体情况。

更详细的回答是:Mono的C#编译器生成的IL与.NET生成的IL相同。

问题在于额外的内容;即使用.NET中没有可用的Mono库的内容(例如WPF)。

另一个不兼容的领域是使用Win32特定的API。

因此,“有点”的答案是最好的。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接