國產(chǎn)系統(tǒng)大勢所趨,如果你公司的winform界面軟件需要在linux上運(yùn)行,如果軟件是用C#開發(fā)的,現(xiàn)在我有一個(gè)好的快速解決方案。
世界第一的微軟的Microsoft Visual Studio,確實(shí)好用,C# 開發(fā)起來確實(shí)效率高,不過微軟的開發(fā)語言開發(fā)的軟件的界面都是跟windows系統(tǒng)綁定的,現(xiàn)在.net core已經(jīng)支持linux系統(tǒng)了,但是僅限于控制臺(tái)應(yīng)用程序,不包含WindowDesktop,所以是不支持原生有界面的.net 軟件的,微軟語言的軟件界面所用的API基本都封裝在System.Windows.Forms.dll上了,所以用支持linux的工具重新開發(fā)System.Windows.Forms類庫就能讓C#軟件的界面在linux運(yùn)行!
首先,必須是.net core 框架開發(fā)C#軟件的,工程框架要改成控制臺(tái),C#軟件升級(jí)開發(fā)框架也是很容易。其次,安裝GTK環(huán)境,基本是一鍵安裝完成。
最近機(jī)緣巧合,公司軟件需要移植上linux運(yùn)行,研究后發(fā)現(xiàn),軟件太復(fù)雜,開發(fā)了十幾年的軟件,重新開發(fā)工程量就很大,而且程序的復(fù)雜性都無法保證能移植成功。就突發(fā)奇想,如果把GTK表單控件封裝成C#的控件直接替換c#的原生表單控件不就行了嗎?然后試了一下確實(shí)可以!而且能保留VS的原生可視化開發(fā)。目前已經(jīng)實(shí)現(xiàn)了常用的表單控件、容器、菜單、數(shù)據(jù)表、選擇器,先看效果:
?文章來源地址http://www.zghlxwxcb.cn/news/detail-528840.html
封裝起來是很復(fù)雜的,GTK提供的是基礎(chǔ)組件,要把組件拆分重新組合成微軟原生控件的組成結(jié)構(gòu),并且要實(shí)現(xiàn)相關(guān)的功能。 有些微軟的表單控件GTK是沒有,需要自制,如掩碼輸入框、日期選擇框、選擇框列表,DataGridView是用GTK.TreeView來封裝實(shí)現(xiàn)的,很多控件的賦值方法和數(shù)據(jù)源模式都不一樣,也需要改。我封裝的控件都實(shí)現(xiàn)了C#原生控件的常用屬性、事件、方法,以保證與原生程序兼容。
?
需要說明一下,界面或工程資源文件的圖片資源在生成程序后是經(jīng)過加密的,而微軟件圖像類和資源讀取方法類庫都是放在WindowDesktop庫上,控制臺(tái)工程是沒有相關(guān)的類庫的,所以無法讀取。Form圖像處理有個(gè)麻煩的地方,界面有任何變動(dòng),F(xiàn)orm.Designer圖像程序的讀程序都會(huì)自動(dòng)更新為System.ComponentModel.ComponentResourceManager,所以自定義命名空間是不行的,一變動(dòng)又要修正。
我的解決方法是自已寫System.Drawing.Image和System.Drawing.Bitmap,自寫System.ComponentModel.ComponentResourceManager類讀取圖片,把Form界面的xxx.resx源文件復(fù)制到一個(gè)文件夾內(nèi),直接當(dāng)成XML文件來讀取,就能把里面的圖像讀取出來,然后轉(zhuǎn)成byte[]數(shù)據(jù)傳給Bitmap。
在使用封裝好的引用的System.Windows.Forms.DLL時(shí),還需要引用System.Resources.Extensions,這個(gè)在實(shí)現(xiàn)程序里用不上,但是VS開發(fā)需要,而且有些版本的還不行,會(huì)出錯(cuò),經(jīng)過測試用.net core2的版本可以
?
最后,控制臺(tái)框架開發(fā)是沒有界面的,而Form界面在控制臺(tái)框架工程里默認(rèn)也不能打開的,但是可以改配置來修正,只需要把obj目錄子目錄下找到xxxx.designer.runtimeconfig.json文件,把NetCore改成WindowDesktop即可,需要重啟VS,如下紅字
"runtimeOptions": {
"tfm": "net6.0",
"framework": {
"name": "Microsoft.WindowsDesktop.App",
"version": "6.0.0"
},
然后就可以在控制臺(tái)框架下愉快的開發(fā)表單界面了。文章來源:http://www.zghlxwxcb.cn/news/detail-528840.html
?
到了這里,關(guān)于C#winform軟件移植上linux的秘密,用GTK開發(fā)System.Windows.Forms的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!