2009-04-22 113 views
5

假設我只是爲了它的喜悅,我決定不再用Java編寫桌面應用程序,而是想切換到使用C#。我希望能夠構建一個可運行在某些主流Linux發行版上的應用程序,以及最近發佈的MS Windows。它將有一個GUI組件。C#/。NET是否有跨平臺的GUI框架?

在Java中,我可以構建一個使用Swing的應用程序。一旦我有了它,我可以將該jar文件從Windows複製到Linux,反之亦然,這取決於我開發它的位置。它通常會與java -jar myapp.jar一起運行。

在C#中可以這樣做嗎?在C#中是否有與Swing或AWT相當的功能?

+1

您可以嘗試NOV: https://www.nevron.com/products-open-vision.aspx。 它在功能上等同於Swing – 2014-07-03 12:37:28

回答

2

您可以試試WxWidgets。它支持C#等許多其他語言,並且是跨平臺的。唯一的缺點是重新編譯每個平臺。或者,你可以嘗試單聲道,這是非常好的,但要注意有一些兼容性問題。對於C#應用程序,沒有預定義的「隨處運行」文件,但Java仍然使用jar,但最好是爲每個平臺重新編譯,以確保兼容性。

2

我見過的最接近的是Mono - 雖然它不支持所有的CLR庫,但我相信,但它是跨平臺的。

5

我相信很大一部分WinForms是在Mono中實現的。你需要在Linux下安裝Mono。不過,您可能會遇到兼容性問題,因爲Mono不是微軟的努力,也沒有得到官方的支持。

+3

是的,但它是一個很好*的社區努力,我只在做一些完全荒謬的事情時纔看到兼容性問題(評論太短而無法描述:D)。普通的桌面編程通常很好。 – 2009-04-22 21:25:02

+0

@ person-b,我同意,這是一個很好的社區努力:-) – 2009-04-22 21:26:39

+2

據我所知,所有的WinForms 2.0都已經實現。 – 2009-04-22 21:28:51

13

可能GTK#將是最接近的。

我知道其他人說單聲道,但這不是很正確。 .net是單聲道的,因爲微軟的Java VM是Sun的Java運行時。 mono與Swing並不在真正的概念空間中。爲此,GTK#更接近匹配。

5

This page有Mono支持的GUI工具包的列表,包括它們每個人的優缺點。正如其他人所建議的,WinForms,GTK#和wxNet都是可行的選擇。

0

Windows.Forms的是用於開發.NET

GUI應用程序儘管標準庫被很好的支持Windows,版本2.0被單完全實現過,這使得它可以由單支持的所有平臺。

WPF,另一方面是在概念上新的圖書館,現在它完全只主要支持在Windows,只是它的一個子集,通過他們的Silverlight實現由單聲道支持 - 月光。

如果您正在構建的應用程序用於生產性跨平臺使用和/或具有保守的性能限制進入Windows窗體。

如果你想試驗和學習新的東西,或者如果你正在爲Windows開發新的應用程序去WPF。這是客戶端GUI應用程序的新技術。

16

Eto.Forms(在github),這是對的頂部WPF的WinFormsGTK一個抽象層,並的MonoMac /可可 - 這樣你就可以在所有平臺上的本機用戶界面,而無需爲每個平臺重新實施。您不必忍受最低公分母,因爲您可以針對每個平臺實施具體細節(如果需要,但不是必需的)。

它有一個好處,它是純粹的.NET,只依賴於操作系統提供的依賴關係,而不是使用GTK或WxWidgets,你必須爲各種平臺打包本地二進制文件。

2

對於iOS,Android和Windows Mobile,有Xamarin.Forms。 http://xamarin.com/forms這是一個抽象層,它允許您編寫跨平臺代碼,該代碼綁定到本機GUI下的本地GUI工具包。

我正在尋找更多的解決方案,這樣的 - 我並不只是看重移動平臺,而且桌面平臺(Windows和Mac OSX的Fedora/Ubuntu的/等Linux)的

3

這是一個老問題,但作爲更新,Mono和Xamarin的組合應該適合您的現代跨平臺需求。

http://www.mono-project.com/docs/gui/winforms/

微軟剛剛開源.NET和正致力於使.NET核心,Linux和MacOS與他們的下一個版本。微軟還與Mono和Xamarin建立了密切的合作伙伴關係,專門用於幫助他們的Android和Linux庫。

http://www.hanselman.com/blog/AnnouncingNET2015NETAsOpenSourceNETOnMacAndLinuxAndVisualStudioCommunity.aspx