1: 首先介绍几个github 仓库
(1) https://wgithub.com/dotnet/dotnet 这个是包含所有dotnet源码的地方,包括runtime,CLI,MSBuild, AppHost, CLR,CSC等所有源代码。但这个库我编译源代码没有成功,但作为阅读源代码仓库再合适不过了。
(2) https://wgithub.com/dotnet/sdk 这个库我试过了,Mac机器编译源代码成功!也就是你可以把你不懂的地方,源码修改一下,测试一下。
2: DotNet SDK 包含了哪些内容?
(1)CLI是dotnet SDK推荐的命令行接口,比如dotnet build,dotnet run这些命令。
(2)AppHost 是应用启动的可执行文件,自我觉得类似mono命令,负责加载CLR虚拟机。
(3)CLR是dotnet 虚拟机,负责加载运行IL程序集
3:如何查看DotNet编译用到了哪个工具以及顺序,可以看源代码,但这里核心是用到这个命令行:
dotnet msbuild -preprocess:<fileName>.xml,这个命令执行后可以看到 类似 CSharpTest.csproj 这个文件,最终都填充了哪些内容。 Google搜索 MSBuild XML 架构元素,理解XML里Target Build指令,就可以看到最终执行了哪些任务以及顺序。
小结一下:
(1)dotnet build这个命令会调用 MSBuild这个构建引擎
(2)MSBuild 执行时会调用CSC编译器把源代码翻译成IL中间代码 生成dll文件
(3)复制一个AppHost 模版的可执行文件,在其中嵌入IL程序集的相对路径,可执行文件的名字改为和工程名字一样。
(4)【AppHost改】 这个可执行文件负责启动应用,加载CLR虚拟机,CLR虚拟机负责加载运行IL程序集。
4:编译用到的主要工具:
(1): csc 编译器 生成IL代码 dll文件
(2):crossgen2 把IL代码dll文件 生成本机代码文件(AOT)
5: CLR运行时详细介绍:
(1)exports.cpp 是整个coreclr 运行时的入口点。
未完待续!