國產OS 中標麒麟下 C# 桌面應用開發環境搭建筆記


1.中標麒麟 7.0 x86 桌面版

 默認安裝創建用戶時,如果沒勾選 root 用戶使用相同的口令,那么安裝完成以后,root 是沒有設置口令的,通過

sudo passwd root

輸入當前普通用戶的口令,之后再設置root 口令就可以了

 

 

 2.安裝 .net core

參考 https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos 安裝 dotnet-sdk-3.1

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

sudo yum install dotnet-sdk-3.1

這里有個小坑,不是版本越新越好,后面會說……

 

 

3.安裝 MonoDevelop

參照 https://www.monodevelop.com/download/#fndtn-download-lin-centos 安裝

 rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"

su -c 'curl https://download.mono-project.com/repo/centos7-vs.repo | tee /etc/yum.repos.d/mono-centos7-vs.repo'

yum remove mono-core (由於多版本沖突,必須先卸載掉麒麟自帶的 mono-core-2.x , 才能正常安裝 monodevelop 依賴的 mono-core-6.10)

yum install monodevelop

 

 

 

4.測試運行(踩坑記錄)

4.1 編寫 Core 控制台程序

編譯報錯:MSB4018 “ResolvePackageAssets”任務意外失敗

解決方法:用記事本打開 csproj 文件,修改 <TargetFramework>netcoreapp1.1</TargetFramework> 為 <TargetFramework>netcoreapp3.1</TargetFramework> (或者你安裝的SDK版本,反正肯定不是1.1)

 

運行報錯:無法執行 xxx.exe

解決方法:確實沒有生成 xxx.exe 文件,但是在控制台下,能看到一個 沒有擴展名的可執行文件xxx可以運行,或者dotnet xxx.dll 也可以

遺留問題:在IDE里面跑不起來,怎么調試?

 

4.2 編寫 Eto.Forms 程序

先通過文件安裝 Eto.Addin.MonoDevelop-2.4.1.1.mpack (注意不要安裝最新的2.5.5,因為monodevelop 要8.4.x才支持),然后按向導創建 GUI 程序

編譯報錯:MSB4018 “ResolvePackageAssets”任務意外失敗

  參見 https://github.com/mono/monodevelop/issues/9645 (這里補充一句,CentOS 7 下也出現編譯報錯MSB4018)

  嘗試安裝 Mono 6.13 ,網絡超時,未果……(這里有個經驗,不要熬夜,熬夜白搭,mono家的東西在國內,白天下載比晚上靠譜得多)

  嘗試編譯安裝 MonoDevelop 高版本(8.4.3.12),通過 https://github.com/mono/monodevelop/archive/monodevelop-8.4.3.12.tar.gz 下載源碼后,參照 https://github.com/mono/monodevelop#compiling 執行編譯,結果

  ./configure 報錯找不到 profiles/stable, 看了一下 profiles 目錄下只有 gnome, mac 和 win

  ./configure --profile=gnome 報錯提示安裝 autoconf 和 automake, 通過 yum 順利安裝以后通過

  make 報錯一大堆,鑒於本人linux 菜鳥的水平,暫時放棄……

解決方案:卸載 dotnet-sdk-3.1

  沒錯,卸載完了,再運行monodevelop,Eto.Forms 的程序就編譯正常了,說來說去還是 NuGet 版本沖突的鍋,待有機會我把 mono 升級到 6.13 再試試。

   至於 dotnet sdk,我裝了個自己在用的 dotnet-sdk-2.2 的,不用管 LTS 什么的,夠用就行不是么?

 

4.3 編寫 Gtk# GUI 程序,編譯成功,通過 mono 運行正常,這個最保險。

 

 

5.寫在后面的話

 希望通過 C# 編寫 Linux 下的 GUI 程序,要克服的問題不少,而且MS對跨平台的桌面應用方向的積極性也不高,簡單的表單類窗體程序還好,要移植視頻播放或者嵌入瀏覽器內核的程序(Eto.Forms 的WebView組件調用WebKit 內核太老很多網頁都不支持,MS倒是新出了個基於 Edge 的 WebView2,可 Edge壓根就沒有Linux版),任重道遠啊

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM