网站首页 > 开源技术 正文
起因
.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版本和工具:
- dotnet 需要这个版本6.0.100-rc.1.21430.12
- cmake 不低于3.16.4
- 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所在目录
- System.Runtime.dll
- System.Console.dll
- System.Threading.dll
- System.Text.Encoding.Extensions.dll
- System.Runtime.InteropServices.dll
这时候使用VS调试运行,就没问题了.
如果您觉得对您有用的话,可以点个赞或者加个关注,欢迎大家一起进行技术交流
猜你喜欢
- 2025-04-09 docker容器安装与部署,常用命令、容器卷、dockerfile,详细教程
- 2025-04-09 pytorch的一个最简单的cpp扩展(pytorch cdist)
- 2025-04-09 微软Windows 11将改版BSOD、强制登录账号才能安装
- 2025-04-09 windows环境下配置sphinx输出html文档
- 2025-04-09 超详细windows安装配置WSL2(ubuntu20.04)步骤
- 2025-04-09 微软Win11预览版隐藏特性:新增配置答疑区域
- 2025-04-09 本想搞清楚ESM和CJS模块的转换问题,没想到写完我的问题更多了
- 2025-04-09 微软Win11预览版隐藏特性:开始菜单右键新增左 / 右移动选项
- 2025-04-09 怎样使用Swift创建命令行脚本(1)(swift操作)
- 2025-04-09 Ionic开发笔记(一 环境安装)(开发环境怎么安装)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)