.Net 7 Alpha Runtime源码编译
起因
最近在本地调试.Net Runtime(Core CLR)代码,遇到断点和源代码不匹配的情况,是因为本地代码切换到mian分支上,有时间就从GitHub拉取最新的代码.最近看到两个比较好的改进.- NativeAOT相关代码,移动Runtime中,NativeAOT不在作为一个单独项目.可以说NativeAOT以后会变得更加实用.
- 正则表达式开始支持代码生成,通过代码生成来提高正则表达式的性能(代码生成,在生成JSON已经使用了,性能最好能提高40%).
编译.Net 7
这里跳过安装依赖工具这一步,可以参考到 如何编译.Net 6 Runtime源码调整依赖.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
编译遇到的问题
在编译时,遇到了一个错误:提示在externals.csproj项目工程文件的91行找不到文件.打开该项目工程文件:
<Error Condition="'$(SwapNativeForIL)' == 'true' and '@(CoreCLRILFiles)' == ''" Text="Could not locate CoreCLR IL files." />
推测是把NativeAOT移过来时,这一块没有调整.所以这里尝试把这行代码进行注释.在重新编译,发现竟然编译成功了.
如何生成VS解决方案文件
这里纠正一下 如何编译.Net 6 Runtime源码 ,在使用"./build.cmd -subset clr+libs",默认是不会生成CoreCLR.sln解决方案.需要执行命令生成:#生成CoreCLR.sln
./build.cmd -vs coreclr.sln -a x64 -c Debug
NativeAOT引导程序
打开CoreCLR.sln解决方案.bootstrapper项目,主要链接ILComplier编译.Net程序生成的目标文件(*.obj/*.o)
秋风
2022-01-02