.Net 7 Alpha Runtime源码编译

起因

最近在本地调试.Net Runtime(Core CLR)代码,遇到断点和源代码不匹配的情况,是因为本地代码切换到mian分支上,有时间就从GitHub拉取最新的代码.最近看到两个比较好的改进.
  1. NativeAOT相关代码,移动Runtime中,NativeAOT不在作为一个单独项目.可以说NativeAOT以后会变得更加实用.
  2. 正则表达式开始支持代码生成,通过代码生成来提高正则表达式的性能(代码生成,在生成JSON已经使用了,性能最好能提高40%).

编译.Net 7

这里跳过安装依赖工具这一步,可以参考到 如何编译.Net 6 Runtime源码

调整依赖.Net 版本:
修改依赖的.Net版本

#.Net 6 CoreCLR编译
./build.cmd -subset clr+libs

#.Net 7 编译增加NatvieAOT
./build.cmd clr.jit+clr.tools+clr.nativeaotlibs+libs -rc Debug -lc Debug

编译遇到的问题

在编译时,遇到了一个错误:
在编译.Net 7遇到错误,externals.csproj生成失败
提示在externals.csproj项目工程文件的91行找不到文件.打开该项目工程文件:
<Error Condition="'$(SwapNativeForIL)' == 'true' and '@(CoreCLRILFiles)' == ''" Text="Could not locate CoreCLR IL files." />

推测是把NativeAOT移过来时,这一块没有调整.所以这里尝试把这行代码进行注释.在重新编译,发现竟然编译成功了.

在编译.Net 7遇到错误,解决办法就是注释错误处理这一行代码

如何生成VS解决方案文件

这里纠正一下 如何编译.Net 6 Runtime源码 ,在使用"./build.cmd -subset clr+libs",默认是不会生成CoreCLR.sln解决方案.需要执行命令生成:
#生成CoreCLR.sln
./build.cmd -vs coreclr.sln -a x64 -c Debug

在编译.Net 7,生成解决方案文件

NativeAOT引导程序

打开CoreCLR.sln解决方案.

.Net 7 NativeAOT引导程序项目

bootstrapper项目,主要链接ILComplier编译.Net程序生成的目标文件(*.obj/*.o)


秋风 2022-01-02