如何编译 dotnet/aspnetcore 源代码
前言
最近,準備為 dotnet/aspnetcore 修改 issue,但是在 clone 代碼后,發(fā)現(xiàn)要編譯成功,遠沒有想象中那么容易。
因此,將整個過程進行記錄,以供大家參考。
以下操作都是在 Windows 10 下完成。
0.環(huán)境準備
詳見官方文檔:《使用源碼編譯 ASP.NET Core》(https://github.com/dotnet/aspnetcore/blob/main/docs/BuildFromSource.md) 中的“Step 2: Install pre-requisites”。
我的機器只提前裝了 Visual Studio 2022,JDK 和 NodeJS。
大家可以自行按需安裝。
1.還原存儲庫
按照 BuildFromSource.md 的描述,在命令行窗口進入代碼所在目錄,輸入如下命令開始還原存儲庫:
restore.cmd等待少許,就碰到了第一個錯誤:
這一看就是下載超時了,這該死的網(wǎng)絡(luò)!
2.暗渡陳倉
找到下載命令所在文件 .dotnet\dotnet-install.ps1,發(fā)現(xiàn)代碼邏輯比較復雜,不太好修改。
不過,轉(zhuǎn)念一想,既然遠程下載慢,那不如改成從本地下載!
根據(jù)上面報錯的下載鏈接,找到獲取下載地址的代碼:
function?Get-Feeds-To-Use() {$feeds?=?@("https://dotnetcli.azureedge.net/dotnet","https://dotnetbuilds.azureedge.net/public")if?(-not?[string]::IsNullOrEmpty($AzureFeed))?{$feeds?=?@($AzureFeed)}if?($NoCdn)?{$feeds?=?@("https://dotnetcli.blob.core.windows.net/dotnet","https://dotnetbuilds.blob.core.windows.net/public")if?(-not?[string]::IsNullOrEmpty($UncachedFeed))?{$feeds?=?@($UncachedFeed)}}return?$feeds }修改成從本地下載:
function?Get-Feeds-To-Use() {$feeds?=?@("http://localhost:12345/dotnet")return?$feeds }現(xiàn)在,只需要在本地創(chuàng)建 IIS 站點,每次報錯后終止程序。
再根據(jù)報錯鏈接,使用下載工具下載原始鏈接,放置在本地站點對應(yīng)目錄,然后重新運行 restore.cmd 即可。
吐槽一下:其中一個文件下了4個小時。囧rz
3.獲取 submodule 源碼
經(jīng)過多次重試,總算全部下載成功了。
但是,又顯示了另一個錯誤:
參照 BuildFromSource.md,發(fā)現(xiàn)我們 clone 時掉了參數(shù) --recursive:
git?clone?--recursive?https://github.com/YOUR_USERNAME/aspnetcore幸好還可以補救:
git?submodule?update?--init?--recursive重新運行 restore.cmd 順利完成。
4.編譯
但是,當我們使用 VS2022 編譯 dotnet/aspnetcore 的任意一個項目時,卻提示找不到指定SDK:
原來它是在找 SDK 7.0:
"sdk":?{"version":?"7.0.100-preview.2.22103.2"}而這個 SDK 其實在前面的步驟已經(jīng)安裝在源碼目錄下了。
因此,只需要將源碼目錄下 SDK 路徑,例如 E:\Codes\aspnetcore\.dotnet\sdk,加入到 PATH 環(huán)境變量中。
5.測試
但是,當我們運行測試時,卻提示找不到測試用例。
根據(jù)錯誤提示:
我們把源碼目錄下的對應(yīng)路徑下的所有內(nèi)容, 例如 E:\Codes\aspnetcore\.dotnet\shared\Microsoft.NETCore.App,復制到 C:\Program Files\dotnet\shared\Microsoft.NETCore.AppA?目錄中。
再次運行測試成功.
結(jié)論
這次編譯碰到的主要問題,還是由于訪問國外的網(wǎng)速太慢造成的。
但是和用于 dotnet/runtime 的解決思路不同。
如果你在編譯 dotnet/aspnetcore 的源代碼時碰到其它問題,歡迎到我的公眾號“My IO”留言討論
總結(jié)
以上是生活随笔為你收集整理的如何编译 dotnet/aspnetcore 源代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 堪比JMeter的.Net压测工具 -
- 下一篇: Windows 11 任务管理器重磅升级