编译的目的
debug版本的运行时,调试源码,一行不差。
.NET Core 源码编译
https://github.com/dotnet 这是一个合并过后的仓库,包括四个项目:
重点关注Runtime这个仓库:
git clone https://github.com/dotnet/runtime.git
Windows环境:
Win 10 专业版 1903
第一步:长路径:
- 组策略(gpedit.msc) > 计算机配置 > 管理模板 > 系统 > 文件系统 > 启用 Win32 长路径
- 管理员终端:git config –system core.longpaths true
第二步:VS 安装组件
- 工作负载: .NET桌面开发、 C++桌面开发
- 使用源码中的.vsconfig,在installer中导入即可。
第三步:CMake(最低3.15.5)http://www.cmake.org/download
第四步:Python (最低3.7.4)
- .\build -subsetCategory CoreClr 编译分类CoreClr
Linux环境
安装以下软件包
sudo apt-get update sudo apt-get install apt-transport-https ca-certificates gnupg software-properties-common wget
获取签名密钥
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | apt-key add -
将kitware存储库添加到源列表并进行更新
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/bionic main' sudo apt-get update
安装 kitware 密钥更新包
sudo apt-get install kitware-archive-keyring sudo apt-key --keyring /etc/apt/trusted.gpg del C1F34CDD40CD72DA
安装所有的依赖包
sudo apt-get install locales cmake llvm-9 clang-9 autoconf automake libtool build-essential python curl git lldb-6.0 liblldb-6.0-dev libunwind8 libunwind8-dev gettext libicu-dev liblttng-ust-dev libssl-dev libnuma-dev libkrb5-dev
编译项目
- ./build.sh -subsetCategory CoreClr
- ./build.sh -subsetCategory Libraries
- ./build.sh -subsetCategory Installers
安装运行时,注意目录问题
tar zxf /home/runtime/artifacts/packages/Debug/Shipping/dotnet-runtime-5.0.0-dev-linux-x64.tar.gz -C /usr/share/dotnet
ln -s /usr/share/dotnet/dotnet /usr/local/bin/dotnet
dev 运行时安装包的路径:runtime/artifacts/packages/Debug/Shipping
使用开发版运行时调试的项目配置(csproj)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp5.0</TargetFramework>
<!--添加下面两行-->
<UseAppHost>false</UseAppHost>
<RuntimeFrameworkVersion>5.0.0-dev</RuntimeFrameworkVersion>
</PropertyGroup>
</Project>
Linux 5.0预览版 SDK安装:
创建安装目录
mkdir /home/dotnet_install
转到安装目录
cd /home/dotnet_install
下载安装脚本,我们这里是从微软官方下载的5.0预览版
curl -L https://aka.ms/install-dotnet-preview -o install-dotnet-preview.sh
执行脚本进行安装
bash ./install-dotnet-preview.sh
5.0 开发版运行时:
- dotnet-apphost-pack-5.0.0-dev-win-x64.exe
- dotnet-runtime-5.0.0-dev-win-x64.msi
5.0 开发版符号表:
- dotnet-runtime-symbols-5.0.0-dev-win-x64.zip
最新版CMake for win:
cmake-3.17.0-win64-x64
CoreCLR的源码更适合搞C++的人去研究;
- 作为底层架构师,那实际上是另一个领域,也叫底层技术;
- 上层(应用)架构师可能更加关注Core FX,应用层面的底层;
Core FX(Library)相对于CoreCLR算是上层;
- Core FX(Library)相对于整个Net Core来说,那就是底层;
- 所以研究Core FX(Library)对于C#开发者来说,可能更加实际和有用;
一开始框架开发;然后自己搭框架,业务底层;最后造轮子;研究Core FX;
最后的最后,才会开始另外一门语言和技术,去研究CoreCLR.
可以这么说,CoreCLR属于最底层,底层地狱级别的。
正因如此,架构师也分为系统架构师和应用架构师。