跨平台的.Net框架究竟是如何实现的?

时间:2010-05-04 20:53:41

标签: c# winforms mono cross-platform

在Mac或Linux计算机上运行WinForms应用程序通常需要做什么?

一个。只需复制并运行(假设他们已安装了Framework) 湾重建。
C。化妆品源代码修改。
d。重型源代码修改和表单重新设计。

假设应用程序是通过Visual C#Express或Visual Studio 2008开发为100%托管的C#3代码,目标是.Net Framework 3.5,不使用任何第三方组件/库而开发,无需封装非托管代码或任何低代码-level hacks - 仅使用标准的Microsoft文档.Net Framework C#API)。或者相同的条件,但C#4语言,.Net Framework 4和Visual Studio 2010。

在使用MS .Net Framework和Visual Studio时,是否存在开发Mono-ready应用程序的实用指南?任何指南,提示,特定方面都会突出显示,通知开发人员在编写易于移植的应用程序时需要牢记的内容,而无需在Visual Studio中编写代码时在Mono引用中查找每个函数。

4 个答案:

答案 0 :(得分:12)

您的应用可能只是零修改,但我还没有看到现实世界中发生这种情况。

可以帮助你的工具是MoMA。 MoMA由制作Mono的同一个人制作,并会告诉您是否使用了尚未移植的任何功能。

一般来说,.NET 3.5和Winforms大多数都可以。与版本4的兼容性仍处于开发阶段。

如果您在Windows上进行开发,则更新的工具是Microsoft的.NET Portability Analyzer。这可以通过Visual Studio使用。

答案 1 :(得分:5)

如果它是Windows窗体应用程序,使用标准Windows窗体控件,而没有第三方组件,您通常可以直接在Mono上运行它,只需复制并运行即可。

Mono非常支持Windows Forms和C#3功能。

但是,如果您使用任何本机组件,Mono或WPF支持的数据访问,您将遇到问题。 C#4 / .NET 4很可能在这一点上也不起作用。

答案 2 :(得分:1)

好吧,我没有开发大型项目,但根据我的经验,你必须对你的代码进行一些小的修改,但只是为了改进一些东西。应用程序本身应该运行得很好,无需重新编译。对于Windows窗体,我发现在使用GDi时有时会非常慢,但也许我只是做错了。但是,Mono团队声称它完全支持Windows窗体。

还有一件值得一提的事。编写一个跨平台的应用程序真的很难,如果不使用一些本机操作系统功能就不会苛刻。我认为你应该总是考虑编写一些额外的特定于操作系统的模块,以提供与底层操作系统的紧密集成,并利用一些很酷的东西(比如OSX中的一个很棒的工具栏功能)。你还应该记住,人们习惯于在不同的操作系统上看到不同的外观和感觉

答案 3 :(得分:0)

理论上,.Net是完全跨平台的,因为它不依赖于特定的体系结构,而是依赖于VM。

实际上,你有windows的microsoft实现,以及linux / mac的mono实现。主要问题是实现可能彼此不同,因此很难在多台机器上运行应用程序。

不应该更改源代码,如果不是某些库没有移植到单声道,或者使用了不同的库。

C#4可能有点困难,因为mono尚未与微软实施相关。