背景

隨着.Net Core的崛起,.Net技術棧跨平台已經成為主流趨勢,不管是服務端還是客戶端都在朝着這個目標邁進。其實甚至連最老的.Net Framework技術棧也可以通過開源社區的Mono來實現跨平台開發和運行,這是傳統.Net桌面應用以最小代價進行跨平台移植的選擇之一。
讓Ubuntu時刻保持點亮
默認情況下,Ubuntu會間隔5分鍾之后進入息屏,然后再次進入之后需要輸入密碼,這對我們快速進入研發模式降低了效率。
所以我們需要把這個電源策略重新設置下,讓Ubuntu系統時刻保持點亮狀態。
從右上角進入系統設置
從右上角電源按鈕處進行點擊,可以展開一些功能菜單,其中我們找到Setting設置這個。

找到電源設置

設置屏幕節能策略
我們把這里的的Blank Screen的時間改成Never

雖然這個設置會帶來一些性能代價,但是如果你的研發機器是台式機,這不影響什么。
安裝支撐.Net Framework跨平台運行的Mono環境
添加Mono的包倉庫添加到系統中
- Ubuntu 20.04
sudo apt install gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update

- Ubuntu 18.04
sudo apt install gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
- Ubuntu 16.04
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
sudo apt install apt-transport-https ca-certificates
echo "deb https://download.mono-project.com/repo/ubuntu stable-xenial main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
- UOS/Debian
sudo apt install apt-transport-https dirmngr gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/debian stable-buster main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
命令行安裝Mono
- 基礎安裝
sudo apt install mono-devel
- 完整安裝(推薦)
sudo apt install mono-complete
mono-complete是一個元包,它安裝了Mono運行時、開發工具和所有庫。
驗證安裝
mono --version

基於Mono環境小試牛刀
https://linuxize.com/post/how-to-install-mono-on-ubuntu-20-04/
在Ubuntu里面我們先找到記事本(Text Editor)

填寫示例代碼程序
using System;
public class HelloWorld
{
public static void Main(string[] args)
{
Console.WriteLine ("Hello World!");
}
}
二話不說,先把這個最經典的Hello World跑起來。
復制粘貼進去后,保存為hello.cs文件。


編輯C#程序
csc hello.cs

我們看到,沒有報錯,並且生成了hello.exe文件。
運行C#程序
mono hello.exe

這時候我們看到,它確實正常輸出了hello world,算是小試牛刀了。
其實我們也可以像Windows那樣直接運行它,不過在這之前要給它先設置下運行權限
chmod +x hello.exe
然后我們可以很自然的運行起來了
./hello.exe

如果沒有之前運行權限設置,我們看到,直接運行會被拒絕的。
安裝.Net Framework跨平台利器MonoDevelop
什么是MonoDevelop
雖然這已經是一個被作者塵封的項目了,但是回到今天,如果你要在Linux上開發.Net Framework,這仍然是一個不錯的選擇。

MonoDevelop是一個主要為C#和其他.NET語言設計的免費和開放的集成開發環境,該開發環境於2003年開始開發。MonoDevelop最初是對SharpDevelop的Gtk的改編,但后來被開發以滿足Mono項目開發人員的需求。
從2.2版開始,MonoDevelop已經完全支持Gnu/Linux、Windows和Mac,因此是一個真正的多平台IDE。如果您對在Gnu/Linux中以快速高效的方式使用.Net編程感興趣,用戶可以通過PPA在Ubuntu中安裝MonoDevelop。
MonoDevelop使開發人員能夠在Gnu/Linux、Windows和MacOS X上快速編寫Web和桌面應用程序。它還使開發人員可以輕松地將使用Visual Studio構建的.NET應用程序遷移到Gnu/Linux和MacOS,同時保持單一所有平台的代碼庫。此IDE是在GNU通用公共許可證下分發的免費軟件。
https://www.monodevelop.com/download/#fndtn-download-lin-ubuntu
添加Mono的包倉庫添加到系統中
- Ubuntu 18.04/20.04/21.04
sudo apt install apt-transport-https dirmngr
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu vs-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-vs.list
sudo apt update




- Ubuntu 16.04
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
sudo apt install apt-transport-https
echo "deb https://download.mono-project.com/repo/ubuntu vs-xenial main" | sudo tee /etc/apt/sources.list.d/mono-official-vs.list
sudo apt update
- Ubuntu 14.04
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
sudo apt install apt-transport-https
echo "deb https://download.mono-project.com/repo/ubuntu vs-trusty main" | sudo tee /etc/apt/sources.list.d/mono-official-vs.list
sudo apt update
命令行安裝MonoDevelop
sudo apt-get install monodevelop

等待完成

運行MonoDevelop
安裝完畢之后,我們可以切到Dashboard,找到MonoDevelop

運行它,界面還是磅礴大氣

使用MonoDevelop打開項目
從左上角的File菜單->Open->找到自己的解決方案目錄。

然后選擇Linux Debug模式運行

卸載MonoDevelop
刪除程序
sudo apt remove monodevelop; sudo apt autoremove
刪除包倉庫
sudo rm /etc/apt/sources.list.d/mono-official-vs.list
安裝微軟出品的輕代碼編輯神器Visual Studio Code
基於Snap命令先搜搜VsCode
sudo snap find vscode

牛逼,微軟獨霸了code這個名字,code就是我們知道的stable穩定版,而code-insiders是開發者預覽版。
sudo snap install code --classic
接下來通過命令行來安裝它。

它提示我們要帶上--classic參數。

不出一會就安裝完畢了。
基於Deb包安裝VsCode

運行VsCode
安裝完畢之后,我們可以切到Dashboard,找到Visual Studio Code

成功運行它,並且如往常一樣,我們可以基於它來打開文件或者文件夾。

安裝VsCode插件
這里推薦至少要裝兩個插件:
- Chinese (Simplified) (簡體中文) Language Pack for Visual Studio Code,這個是解決漢化的問題。

- GitLens — Git supercharged,這個可以提供可視化的Git管理體驗。

建立Ubuntu和主系統之間的共享目錄
初步想法,剛才把后續代碼也放到這里面,這樣我可以同時在Ubuntu和主系統中一起來維護它,會不會更好。
開啟Mutipass的共享目錄功能
默認情況下Mutipass這個功能是關閉的,我們需要使用Windows Terminal的管理員模式把它打開。
multipass set local.privileged-mounts=true

設置主系統目錄和Ubuntu目錄之間的映射關系
multipass mount /Users/taylorshi/shareWithCodeSpace UbuntuImpish:/home/taylorshi/shareWithCodeSpace
安裝最流行的源代碼管理組件Git
必須知道
如果你使用較高版本Ubuntu,比如20.04、21.04,其實它已經內置了Git,無需重新安裝。

基於Snap命令先搜搜VsCode
sudo snap find git

從結果中,我們找到一個Ubuntu官方維護的Git工具鏈,沒錯就是它了。
sudo snap install git-ubuntu --classic
等待進度條跑完

基於Apt包管理工具安裝Git
sudo apt update && sudo apt install git

驗證下Git
git --version

配置Git的用戶信息
如果git之前沒有配置過這個,第一次還是要弄的
git config --global user.name "your_name"
git config --global user.email <your_email>

這個配置文件會存儲在~/.gitconfig位置。
生成或者配置SSH密鑰對
由於這個密鑰會存在在當前賬號下面,這里建議,遠程Ubuntu之后,使用遠程里面的終端來操作,這樣生成的密鑰就在遠程那個對應賬戶下了。
ssh-keygen -t rsa -C "your_email"
-t指定密鑰類型,默認是rsa,可以省略。-C設置注釋文字,比如郵箱。-f指定密鑰文件存儲文件名-b指定密鑰長度,比如:4096
回車之后會問你一堆問題,比如你要不要自定義名字,自定義密碼,哈哈,通通不用,全部回車搞定即可。

你會看到,生成的密鑰對存儲在/root/.ssh/id_rsa、/root/.ssh/id_rsa.pub,其中id_rsa為私鑰;id_rsa.pub為公鑰。

我們把公鑰復制出來。
cat id_rsa.pub

把這個公鑰加到你的Github或者Gitlab后台。

驗證密鑰對配置
當我們把密鑰對的公鑰添加到Github或者Gitlab后台之后,我們還可以驗證。
ssh -T $targetGitHost
比如:
ssh -T git@github.com
如果成功呢,它會給你確認下數字指紋,並且給你一個歡迎詞

如果失敗,那就直接把你拒絕了

但是這里有個值得注意的是,你使用git-ssh密鑰對應該是在你之前生成密鑰對的同一個用戶下,比如你root生成的,那就需要在root下使用,不能串,串了可不認。
通過Git拉取代碼
我們可以在當前賬戶目錄下面建立一個代碼空間,比如/home/xxxx/CodeSpace,這里使用:
mkdir CodeSpace
來創建這個目錄,然后切到這個目錄下面
cd CodeSpace
再拉取項目代碼
git clone $targetGitProjectSSHUrl

在這種模式下,到時候使用Visual Studio Code+GitLens來使用就是很順暢了。

安裝Git的LFS插件
Git大文件存儲(Large File Storage, LFS)將音頻樣本、視頻、數據集和圖形等大文件替換為Git內部的文本指針,同時將文件內容存儲在GitHub.com或GitHub Enterprise等遠程服務器上。
如果是Windows用戶,在Git For Windows中就已經包括了它,但是對Linux來說,需要額外安裝才行。
sudo apt install git-lfs

其實Github默認就送了1GB的Git LFS空間,用完還可以單獨買,從Settings-Billing and Plans-Git LFS Data處可以看到使用和剩余情況。

安裝后使用Git LFS比較簡單,先執行一次初始化
git lfs install

如果項目中已經有文件采用LFS的方式進行托管,那么我們可以通過拉取命令把對應的LFS拉取下來。
git lfs pull

參考
- 通過.NET Framework實現跨平台
- How to Install Mono on Ubuntu 20.04
- Mono Install Stable On Ubuntu
- 玩轉WSL(6)之Git配置
- SSH-keygen用法
- 如何在Ubuntu 20.04上安裝Git
- MonoDevelop,通過其PPA安裝在Ubuntu20.04上
- How to Install MonoDevelop On Ubuntu 20.04
- codesigned mkbundled executable never ends with xmonkeysloveplay
- 使用Mono Runtime Bundle制作安裝包讓C#桌面應用程序脫離net framework
- 如何在macOS平台上利用mkbundle對.Net命令台程序進行打包?
- MonoTouch 二三事(三)mono mkbundle 打包程序的解包支持
- Git-LFS使用
