asp.net core學習:准備asp.net core源碼編譯環境


通過源碼學習,不但可以讓我們知道asp.net core框架更底層的原理,而且在遇到問題找不到資料時,也是一個解決道路,以下是我准備asp.net core源碼編譯時的步驟。

1.下載源碼:github https://github.com/dotnet/aspnetcore

$ git clone --recursive https://github.com/aspnet/AspNetCore

$ git submodule update --init --recursive

2.用希望調試的tag版本創建分支,如果只想調主分支可忽略此步,我要調試的是 v3.1.10,選擇版本的時候最好選擇你本機Asp.net core的最高版本,

查看所有tag

$ git tag

檢出v3.1.10

$ git checkout -b local3.1.10 v3.1.10

還原子模塊

$ git submodule update --init --recursive

3.准備環境

  • windows 10,版本>=1803,打開powershell執行腳本的限制

以管理員運行powershell

PS> set-ExecutionPolicy RemoteSigned,選擇'Y'

  • >10GB的磁盤剩余空間
  • Visual Studio 2019,同時需要安裝C++桌面開發包和其它的一些必要的組件

PS> ./eng/scripts/InstallVisualStudio.ps1

  • Git客戶端工具
  • NodeJS >=10.14.2
  • JDK >=11,可用安裝腳本安裝

PS> ./eng/scripts/InstallJdk.ps1

  • 安裝Chrome, Selenium測試需要這個

4.Visual Stduio 中編譯

  • 還原依賴,和各種語言、平台項目的包.

PS> .\restore.cmd

這個過程會比較慢,等的時間也是最長的,尤其Yarn的包管坑不管埋的慢,一直在失敗,程序會自動重試。

  • 編譯
PS>.\build.cmd

經過漫長的等待,如果不出意外,就編譯成功了。程序生成在:artifacts/bin目錄下。

  • 源碼中根據不同的組件包含多個解決方案,sln是不可以直接打開的,正確的方式是運行目錄 里的startvs.cmd 它會設置必要的環境變量,並自動使用Visual Studio打開.sln文件。

我們以MVC項目為例,打開/src/Mvc/startvs.cmd。

“生成”一下samples/MvcSandbox,並設為啟動項目,如果全部生成成功,就可以運行了。這里需要注意,運行的時候要以控制台模式運行Mvc,而不要選擇“IIS Express"模式。

成功運行如下:

 5.打包及源碼步進調試

  • 編譯源碼生成nuget包和運行時安裝包。

PS>./build.cmd -all -pack -arch x64

PS>./build.cmd -all -pack -arch x86 -noBuildJava

PS>./build.cmd -buildInstallers

編譯出來的運行時安裝包,裝上之后,在新建項目時,選擇對應的asp.net core 版本,在調試的時候就可以步進調試了。

 6.編譯Extensions項目

  • 在前面我們調試的時候會發現在有些函數是不能逐語句調試的,除去.net core的程序集外,還有一部分是位於Extensions項目的程序集,我們通過源碼編譯一下.

源碼下載

$ git clone https://github.com/dotnet/extensions

把指定標簽版本遷至分支

$ git checkout -b local3.1.10 v3.1.10

還原依賴

PS> ./restore.cmd

打開VS 編輯源碼

PS> ./startvs.cmd

  • Extensions項目不是安裝包,而是一系統的程序集,我們可以通過生成符號nuget包並在vs中引用這些包的方式來實現調試時步入源碼。
第一步.編譯生成

PS> ./build.cmd

編譯之后會在artifacts\packages\Debug\Shipping目錄生成nuget的符號包 

第二步.在需要調試項目的解決方案目錄(.sln目錄)新建nuget.config文件,文件內容:
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <clear /> <add key="MyBuildOfAspNetCore" value="D:\dotnet_opensource\extensions\artifacts\packages\Debug\Shipping" /> <add key="NuGet.org" value="https://api.nuget.org/v3/index.json" /> </packageSources> </configuration>

MyBuildOfAspNetCore的值為我們編譯出來的包含符號包的目錄。

當然也可以在VS中把我們的MyBuildOfAspNetCore設置成全部的nuget源,針對所有項目都生效。


第三步.項目中使用nuget引用將需要步入源碼的nuget包,調試時逐語句進入即可。

如果以前我們引用過相同版本的extensions nuget包,可能存在緩存的問題而加載不了我們自已編譯的extensions。我們可以清一下nuget的緩存。

打開Visual Studio ,Tools -> NuGet Package Manager -> Package Manager Colsole,輸入命令

PM> nuget locals all -clear

7.其它問題

*我在網上看到別人restore慢的解決方案是設置代理,如下:

需要為 Powershell 與命令行設置代理,根據自己代理軟件的監聽的端口進行調整:
# CMD
set http_proxy=http://127.0.0.1:7890 & set https_proxy=http://127.0.0.1:7890

# Powershell
$Env:http_proxy="http://127.0.0.1:7890";$Env:https_proxy="http://127.0.0.1:7890"

 但我是開着梯子編的,不過我的梯子沒啥用。不知這個方法是否可行。

 

*如果遇到以下錯誤,需要自已下載相應版本的grandle,也可在編譯命令后加“ -noBuildJava”,來不編譯java部分。

 

 grandle發行列表:https://services.gradle.org/distributions/

  下載相應的文件再重新編譯即可,

我的是gradle-5.3-bin.zip至目錄 :C:\Users\[你的登陸用戶]\.gradle\wrapper\dists\gradle-5.3-bin\[隨機目錄]

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM