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 模版】可执行文件,负责加载CLR虚拟机
(3)CLR是dotnet 虚拟机,负责加载运行IL程序集
3:如何查看DotNet编译用到了哪个工具以及顺序,可以看源代码,但这里核心是用到这个命令行:
dotnet msbuild -preprocess:<fileName>.xml,这个命令执行后可以看到 类似 CSharpTest.csproj 这个文件,最终都填充了哪些内容。 Google搜索 MSBuild XML 架构元素,理解XML里Target Build指令,就可以看到最终执行了哪些任务以及顺序。
小结一下:MSBuild 编译后 会调用CSC编译器把源代码翻译成IL中间代码 生成dll文件,然后复制一个【AppHost 模版】的可执行文件并且在其中写入IL程序集的相对路径,最终把【AppHost改】可执行文件的名字改为和工程名字一样。【AppHost改】 这个可执行文件负责启动应用,加载CLR虚拟机,CLR虚拟机负责加载运行IL程序集。
4:编译用到的主要工具:
(1): csc 编译器 生成IL代码 dll文件
(2):crossgen2 把IL代码dll文件 生成本机代码文件(AOT)
未完待续!