Net Core教程

Asp.net Core 6源码编译

本文主要是介绍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 

个人建议开启的你的黑科技 ,刚开始没开启编译的时候半天不动,后来开启了有反应了  ,这个时候你会遇到各种错误 。不要慌一一解决。

  • 界面突然不动了,隔了好长时间都不动
  • 报错找不到某个文件夹里的某个文件
  1. 界面突然不动了,或者好长时间不动 试着ctrl +c 停止,不行就关闭重新restore
  2. 找不到某个文件 ,那么就需要我们去把文件给补回来 ,比如我们的vswhere 文件 你嫌下载的慢 可以直接复制 到 .tools/vswhere/3.0.1/里面去。
  3. 比如找不到   msbuild\16.5.0-alpha\tools\MSBuild\Microsoft\VC\v160\下的东西 ,那么你就需要去复制过来  ,这个东西是vs 选择了c++桌面开发才有的东西,而且v160 是vs2019的,vs2022 则是v170 ,所以上面说的vs的安装,不嫌弃麻烦可以装一下
  4. ./eng/scripts/InstallVisualStudio.ps1 [-Edition {Enterprise|Community|Professional}]{三个版本 企业 专业 社区 } 
  5. 比如我装的社区版本   ./eng/scripts/InstallVisualStudio.ps1 -Edition Community
  6. 执行了之后会给你安装vs2019 以及编译所需要的其他组件 ,包括上面的 v160

3.3 执行build

开始编译共有三个命令:

.\eng\build.cmd -all -pack -arch x64
.\eng\build.cmd -all -pack -arch x86 -noBuildJava
.\eng\build.cmd -buildInstallers

遇到的错误 :

  1. sdk的编译版本没安装 需要 win10 sdk 10.0.18362.0    去vs install 的可使用的 c++桌面开发选择此版本安装就可。
  2. 编译源码错误  刚开始编译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

 

单数丹斯

 

这篇关于Asp.net Core 6源码编译的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!