乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - Ubuntu下.Net Framework研发环境配置指南
背景
随着.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使用