小試Linux下C#編程接觸Linux已經(jīng)有一段日子了,,從Debian的Ubuntu到Redhat的Fedora,,再到SUSE,桌面從GNOME到KDE,。感覺Linux還真是不錯,,桌面挺好看的,應(yīng)用軟件也挺多的,。終于忍不住想要自己在Linux下寫個小程序看看了,。OK,有想法就能付諸實現(xiàn),,做個簡單的WinForm程序吧,,功能是使用調(diào)用遠程天氣預報WebService(http://webservice./WebServices/WeatherWS.asmx?wsdl)。 寫GUI程序得有一個現(xiàn)成的UI Framework,,那么該用哪個呢,?Google了一下,有很多答案,,不過引起我注意的是Linux下面可以通過Mono運行時來跑.NET Framework的程序,。這讓我很驚訝,也很好奇,。驚訝的是.NET Framework終于可以實現(xiàn)“跨平臺”了,,好奇的是效果怎么樣,,真的能用嗎?于是使用VS2010 C#.NET創(chuàng)建WinForm工程,,添加Web引用,,寫幾行調(diào)用代碼,華麗麗的完工,。且看一下Windows上面的運行效果,。 接著直接復制binary到Ubuntu下面,嘗試運行,。沒成功,,出錯了。,。,。 原來是.NET Framework版本問題,VS2010默認是4.0,。那么我試試2.0,,再copy過去,打開,,還是不行,。。,。 嗯,。。,。這次是System.Windows.Forms.dll沒有找到,。查了一下Mono的GAC,確實沒有這個dll,。不明白為什么沒有,,Google一下,發(fā)現(xiàn),,原來mono-winform是一個額外的包,。使用Sympatic Package Manager自動下載安裝了如下包,終于可以運行了,。 libgluezilla (version 2.4.3-2) will be installed 亂碼。,。,。不對,是框框碼,,不是亂碼,。再Google一下,,完了,貌似沒解決方案,,除非把源碼挪到Linux下面用mono msc編譯,,還得指定編譯時-codepage:utf8。 文章就先寫到這里,,等我找到更好的解決辦法時再更新此文,,也請“知情人士”給出解決方案,謝謝,。下次我會寫一篇用C++開發(fā)同樣功能的跨平臺的小程序,。 分類: .NET/Mono
0
0
(請您對文章做出評價) 評論
今天也是在Ubuntu下運行了一個在VS2010寫的winForm程序,。也是出現(xiàn)你這樣的狀況,在Google搜索,,找到了你的日志,。
也是沒有解決,但是又找到一篇文章 http://forum./viewtopic.php?f=88&t=201283&start=0 說是字體的原因,。把windows的宋體復制到Ubuntu ~/.fonts下然后 fc-cache -f一下,。再運行還是不行。 后來在VS里面把字號改了一下,,再編譯就可以正常顯示了,。或者指定一個其他的字體,,總之就是默認的不行,。還沒解決這個,,,希望這個對你有用,,并且能夠找到進一步的解決。 支持(0)反對(0) 繼續(xù)實驗,,更改一下Form的字體就可以了,,整個Form里面其他的控件中文都顯示正常,也就是說,,在窗體設(shè)計器生成的代碼里面有
this.Font = new System.Drawing.Font("宋體", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 來指定一下字體就可以了,,因為VS2010默認沒有為控件指定字體。 現(xiàn)在看Form是沒問題了,,字體顯示正常,! 但是MessageBox代碼顯示對話框里面還是方框。期待解決辦法,。 System.Windows.Forms.MessageBox.Show("漢字"); 還是不行,,用Mono在Linux下編譯都不行,。頑強的顯示方框。 查了下MessageBox.Show最終是通過Win32API實現(xiàn)的,MONO現(xiàn)在只支持一小部分的WIN32API,。如果通過WINE+MONO FOR WINDOWS應(yīng)該可以解決,,但是效率。,。 WINE其實是一種很不優(yōu)雅的解決方案,,既稱不上是模擬器,,又不算是一個虛擬機。安裝配置繁瑣,,嚴重不支持國際化,。所以幾乎沒有太大價值。 Windows內(nèi)部是Unicode(UTF-16)編碼的,,而Linux內(nèi)部是UTF-8編碼,。這使得跨平臺應(yīng)用程序國際化方案非常難實現(xiàn),直接導致開發(fā)人員為了跨平臺的國際化得專門給Windows使用wchar_t,,而Linux使用char,。。,。 其實大部分知名應(yīng)用程序(如UltraEdit, IconWorkshop, Everest, UltraISO等)在Windows平臺上使用的都是“偽國際化”,。也就是說顯示文字所對應(yīng)的區(qū)域設(shè)置必須和系統(tǒng)區(qū)域設(shè)置一致,不然就亂碼,。這讓“國際化”三個字情何以堪,。 |
|
來自: franklinfj > 《liunx》