Asp.net Core 6源码编译
作者:互联网
最近一直有看asp.net core 框架,想知道内部原理是什么,于是四处看别人的技术文章,发现大佬都有看源码,于是也跟着看看源码,但是在github上实在看的着急,想着干脆自己编译一下源码本地调试把。
同时官方有build指引,链接:aspnetcore/BuildFromSource.md at main · dotnet/aspnetcore · GitHub,话不多说,开干。
1. 准备
- 需要有个能访问外网的环境,这点对于编译我觉得十分重要
- 有耐心,因为等待的时候可能有点长,同时可能会出现各种问题,所以需要有耐心,我就是换了三个分支编译了n次才成功。
2. 代码下载
以下会很慢,个人建议可以找个镜像源来使用。
git clone --recursive https://github.com/donnet/aspnetcore
比如我们可以用码云的镜像,这样就快了许多。
git clone --recursive https://gitee.com/microsoft/AspNetCore.git
然后你会发现有部分源码下载不下来,不要慌,毕竟慌也没用,找解决方案。
查看.git文件夹下config文件
[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true [submodule] active = . [remote "origin"] url = https://gitee.com/microsoft/AspNetCore.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "main"] remote = origin merge = refs/heads/main [submodule "src/submodules/MessagePack-CSharp"] url = https://github.com/aspnet/MessagePack-CSharp.git [submodule "src/submodules/googletest"] url = https://github.com/google/googletest [submodule "src/submodules/spa-templates"] url = https://github.com/dotnet/spa-templates.git
可以看到有三个github的链接,可能就是下载太慢导致的失败,所以需要我们更换一个源,或者上科技,能够访问外网,由于懒得找镜像源了,于是我选择了后者
这个submodule 就是我们下载失败的东西,可以首先把没下载完的文件夹删除:
路径就是src/submodules/ 下的两个或三个文件夹删除。然后执行
git submodule update --init --recursive
成功之后 源码部分就下载结束了。
2. 环境准备
编译源码需要一些环境 node js jdk ,以及永远的神 vs 。
来看看要求
-
Visual Studio 2022 Visual Studio 2022 (17.1 or above) is required to build the repo locally.
-
Git on Windows
-
NodeJS on Windows Building the repo requires version 16.11.0 or newer of Node. You can find installation executables for Node at https://nodejs.org.
-
Yarn on Windows 安装了node js 需要yarn这个包 执行 npm install -g yarn
vs安装我们待会说。git 肯定已经装了 不然代码都无法下载 ,node js 需要去官网下载安装,注意版本要求 ,然后就是jdk安装,需要版本11以上,由于我以前装的版本是1.8 所以还需要升级。注意安装好jdk之后,设置java_home.
3. 开始编译
首先切换到我们需要编译的分支 ,先看看有哪些分支 git tag,由于分支很多,一下显示不全 需要我们翻页或者下滑,向下键下滑,enter翻页, :q退出。
选择好要编译的版本,比如 git checkout v6.0.1,最开始编译的6.0.5想着新的还不错,但是出了一些我想不到的错误 ,在一番查找资料下 发现了这个 issue ,建议不要去改这个下面的dotnet/x64下面的这个链接地址,因为看别人的编译视频,都是有更改的。大佬建议6.0.5编译很少有人编译的过,反正各种奇怪的原因,于是在n次6.0.5编译不过后 选择了 6.0.1,过于真实 。
3.1 更改 global.json
vswhere 的版本需要你自己去看自己安装了什么版本 C:\Program Files (x86)\Microsoft Visual Studio\Installer 找到vswhere 属性详细信息查看版本。 待会安装的时候需要你拷贝进文件夹的。
这是我自己的更改 ,刚开始本来 把 sdk version 以及下面的dotnet 都改为6.0.300,想着这是最新的版本,也是我本地安装了的版本 结果编译出了一些蛋疼的问题,干脆不改了,这也是看了别人的安装文章说需要改,后来想着可能是这个问题,于是撤销了这个更改,然后根据默认的sdk版本下载了安装包 6.0.0进行安装, 可以去 https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0 查看版本,下图例子 sdk 6.0.300对应的包为 6.0.5。
3.2 执行 .\restore.cmd
个人建议开启的你的黑科技 ,刚开始没开启编译的时候半天不动,后来开启了有反应了 ,这个时候你会遇到各种错误 。不要慌一一解决。
- 界面突然不动了,隔了好长时间都不动
- 报错找不到某个文件夹里的某个文件
- 界面突然不动了,或者好长时间不动 试着ctrl +c 停止,不行就关闭重新restore
- 找不到某个文件 ,那么就需要我们去把文件给补回来 ,比如我们的vswhere 文件 你嫌下载的慢 可以直接复制 到 .tools/vswhere/3.0.1/里面去。
- 比如找不到 msbuild\16.5.0-alpha\tools\MSBuild\Microsoft\VC\v160\下的东西 ,那么你就需要去复制过来 ,这个东西是vs 选择了c++桌面开发才有的东西,而且v160 是vs2019的,vs2022 则是v170 ,所以上面说的vs的安装,不嫌弃麻烦可以装一下
-
./eng/scripts/InstallVisualStudio.ps1 [-Edition {Enterprise|Community|Professional}]{三个版本 企业 专业 社区 }
-
比如我装的社区版本 ./eng/scripts/InstallVisualStudio.ps1 -Edition Community
- 执行了之后会给你安装vs2019 以及编译所需要的其他组件 ,包括上面的 v160
3.3 执行build
开始编译共有三个命令:
.\eng\build.cmd -all -pack -arch x64 .\eng\build.cmd -all -pack -arch x86 -noBuildJava .\eng\build.cmd -buildInstallers
遇到的错误 :
- sdk的编译版本没安装 需要 win10 sdk 10.0.18362.0 去vs install 的可使用的 c++桌面开发选择此版本安装就可。
- 编译源码错误 刚开始编译6.0.5分支时候遇到的错误 ,估计是我更改了sdk版本,使用300版本 ,导致源码的某些方法报错。然后不信邪 改编译分支6.0.1 sdk version 还是改为300,结果同样的错,于是撤销更改为原来的100,编译成功
4. 查看结果
\artifacts\installers\Debug 下看到编译成功的安装包 然后就可以开始的源码之旅了。
参考:
微软官方安装文档:aspnetcore/BuildFromSource.md at main · dotnet/aspnetcore · GitHub 以及提的issue : https://github.com/dotnet/aspnetcore/issues/41656
asp.net core从头学03--编译asp.net core源码 - Touha的文章 - 知乎 https://zhuanlan.zhihu.com/p/461838889
asp.net core从头学03--编译asp.net core源码 - Touha的文章 - 知乎 https://zhuanlan.zhihu.com/p/461838889
asp.net core从头学03--编译asp.net core源码 - Touha的文章 - 知乎 https://zhuanlan.zhihu.com/p/461838889 b站 煮诗君 视频 :https://www.bilibili.com/video/BV1964y1F7hQ
单数丹斯
标签:Core,git,编译,源码,https,6.0,net,com 来源: https://www.cnblogs.com/guoxiaotian/p/16378181.html