编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

如何编译.Net 6 Runtime源码(编译framework)

wxchong 2025-04-09 21:34:33 开源技术 25 ℃ 0 评论

起因

.Net源码在整合Mono之后还没有进行过编译后,所以便在自己电脑编译一下.Net源码,记录一下编译过程遇到的事情.

#.Net源码地址:
https://github.com/dotnet/runtime

# 编译相关的文档
源码目录/docs/workflow/building/coreclr

下载.Net源码

# 使用git 下载源码到本地
git clone git@github.com:dotnet/runtime.git

如果没有没法访问Github,可以在Gitee上查找有没有最近的.这里就不多说了.

准备工作

在根目录的global.json文件,有需要编译依赖的.Net版本和工具:

  1. dotnet 需要这个版本6.0.100-rc.1.21430.12
  2. cmake 不低于3.16.4
  3. python3 不低于3.7.1

cmake和python其实下载最新的就行了,唯一有问题的就下载dotnet rc1 21430这个版本,这个是通过ps脚本下载的,这个默认是国外的Azure下载的.经过测试我是没有下载成功,如果使用工具可以国外Azure,应该是可以下载成功的.

关于依赖使用.Net版本,这里采用从.Net官网下载,下面会讲.

开始编译

从Github获取源码后,一定要记得切换分支,因为main分支,现在已经.Net 7 alpha,因为我调试.Net 6源码.所以我将分支切换release/rc-2

# main分支已经进入.Net 7 alpha版本
git checkout release/6.0-rc2
#使用build.cmd 编译CoreCLR和BCL库
.\build.cmd -subset clr+libs

执行脚本以后,会在源码的根目录创建.dotnet目录,会先下载一个dotnet-install.ps1文件,主要在该脚本下载dotnet rc1 21430这个版本.下载这个失败.所以在global.json修改.Net 版本. 从.Net官网看到.Net 6 RC1只有一个版本,和global.json中的.Net 版本相差不大,然后修改global.json文件中.Net版本为6.0.100-rc.1.21463.6

#.Net 下载地址
https://dotnet.microsoft.com/download/dotnet/6.0

# 拷贝这个地址
https://download.visualstudio.microsoft.com/download/pr/c50149b6-4e1f-4278-869a-742aa2c7cfe5/bc936112cb6f6215b456c6c1e77d8826/dotnet-sdk-6.0.100-rc.1.21463.6-win-x64.zip

找到xxx(根目录)
/.dotnet/dotnet-install.ps1,这里很粗暴地修改下载地址,主要是不懂PowerShell脚本,查找$PayloadURL和$ProductVersionTxtURL这两个变量,将地址改为上面在.Net 官网下载的地址.

#将下载地址替换为可以下载.Net地址
$PayloadURL = "https://download.visualstudio.microsoft.com/download/pr/c50149b6-4e1f-4278-869a-742aa2c7cfe5/bc936112cb6f6215b456c6c1e77d8826/dotnet-sdk-6.0.100-rc.1.21463.6-win-x64.zip";


$ProductVersionTxtURL ="https://download.visualstudio.microsoft.com/download/pr/c50149b6-4e1f-4278-869a-742aa2c7cfe5/bc936112cb6f6215b456c6c1e77d8826/dotnet-sdk-6.0.100-rc.1.21463.6-win-x64.zip"

然后重新开始编译:

.\build.cmd -subset clr+libs

看到上图,代表.Net 源码编译完成,这时候根目录有一个artifacts目录,这里是.Net编译时生成存放的目录.这个目录很大,我这里差不多9个G.


/artifacts/bin/coreclr/windows.x64.Debug 主要是存放CoreRun.exe和其他工具的目录,我将这个目录作为调试目录.


/artifacts/obj/coreclr/windows.x64.Debug/ide目录中可以找到CoreCLR.sln,用VS打开这个解决方案,这里推荐使用VS2022(虽然还是预览版,但打开项目多的解决方案,真的很快)

找到corerun项目,设置启动项目(不设置也没问题).设置调试参数.

命令为: $(SolutionDir)\..\..\..\..\bin\coreclr\windows.$(Platform).$(Configuration)\corerun.exe

参数为: $(SolutionDir)\..\..\..\..\bin\coreclr\windows.$(Platform).$(Configuration)\NetworkApp.dll(为调试的dll)

工作目录为: $(SolutionDir)\..\..\..\..\bin\coreclr\windows.$(Platform).$(Configuration)

在VS编译发现报错,修改VS 连接器:

还需要将以下动态库,放入CoreRun.exe所在目录

  1. System.Runtime.dll
  2. System.Console.dll
  3. System.Threading.dll
  4. System.Text.Encoding.Extensions.dll
  5. System.Runtime.InteropServices.dll

这时候使用VS调试运行,就没问题了.

如果您觉得对您有用的话,可以点个赞或者加个关注,欢迎大家一起进行技术交流

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表