20201105 .net Core CLI与源码编译
目标:全面了解.net core源码;找到源码中自己的学习方向
一、下载源码
1、用git下载源码/克隆源码仓库
git clone --branch v5.0.0-rc.2.20475.5 https://github.com/dotnet/runtime.git
下载包有10分钟超时,时间长了会下载不下来。
2、目录
docs:英文的学习文档,从初级开始
src:.net运行时的全部代码。coreclr、installer(运行时的安装包构建)、libraries(Core FX基础类库)、System.Private.CoreLib
3、windows下编译
(1)win10专业版,最新的版本号2004、1903
(2)VS 2019专业版 16.6 备注:不能是预览版
(3)长路径支持:组策略中长路径、git长路径:
组策略(gpedit.msc)——>计算机配置——>管理模板——>系统——>文件系统——>启用Win32长路径
管理员模式下,git config --system core.longpaths true
(4)VS更多——>导入配置——>runtimesample——>.vsconfig,可以看到最低支持的配件。
(5)CMake:.net core源码底层与操作系统交互的部分是C++写的,编译项目的Makefile文件是用CMake生成的。
https://cmake.org/download/ 下载正式的最新版 需要加载到环境变量中
(6)Python 最新正式版 需要加载到环境变量中
4、编译
(1) ./build.cmd --?
(2)./build.cmd --subset help :下载比较慢,通过这个命令可以查看可以编译的子集
(3) ./build -subset Clr
.build -subset Libs
.build -subset Installer
网络顺畅的话,编译完成大概需要20多分钟。
比那一完成的结果在,runtime-sample——>artifacts中
基础类库位置:bin里面的就是基础类库。 bin——>coreclr:编译好的clr目录;
packages——>Debug——>Shipping——>dotnet-runtime.5.0.0-dev-win-x64.msi:编译好的运行时
dotnet --info :查看编译好的运行时
5、如何让程序运行在自己编译的运行时里
需要有运行时的符号文件才能进入到源码里面。使用Debug版本的运行时,是附带PDB的。
禁用生成可执行文件
6、linux下编译
二、.net开发人员是否有必要研究.net core的源代码
JIT:即时编译器;
源码分两部分:底层执行引擎(系统的API、)、基础类库(HttpClient、工具类)
Core CLR的源码不适合.net开发人员去阅读,.net开发人员不是做底层的,做的是上层应用,没必要去学习底层。
架构师需要懂底层技术吗?.net架构师做的是上层的架构,相对于clr来说,library是上层的;但是library相对于core源码来说,也是底层的。可以学习library。
做开发时,先接触框架——>做业务——>自己搭建框架——>做一些相对业务开发的底层——>造轮子——>研究源码。
学习技术,是从上往下学的,从上层到底层。library可以在造轮子时研究,在会造轮子之前可以不看。
三、练习
1、编译原理