編譯?dotnet和aspnetcore?源代碼詳情
前言:
為 dotnet/aspnetcore 修改 issue,但是在 clone 代碼后,發(fā)現(xiàn)要編譯成功,遠(yuǎn)沒有想象中那么容易。
因此,將整個(gè)過程進(jìn)行記錄,以供大家參考。
?以下操作都是在 Windows 10 下完成。?
0.環(huán)境準(zhǔn)備
詳見官方文檔:《使用源碼編譯 ASP.NET Core》中的“Step 2: Install pre-requisites”。
我的機(jī)器只提前裝了 Visual Studio 2022,JDK 和 NodeJS。
大家可以自行按需安裝。
1.還原存儲(chǔ)庫(kù)
按照 ?BuildFromSource.md?
的描述,在命令行窗口進(jìn)入代碼所在目錄,輸入如下命令開始還原存儲(chǔ)庫(kù):
restore.cmd
等待少許,就碰到了第一個(gè)錯(cuò)誤:
這一看就是下載超時(shí)了,??這該死的網(wǎng)絡(luò)!??
2.暗渡陳倉(cāng)
找到下載命令所在文件 ??.dotnet\dotnet-install.ps1??,發(fā)現(xiàn)代碼邏輯比較復(fù)雜,不太好修改。
?不過,轉(zhuǎn)念一想,既然遠(yuǎn)程下載慢,那不如改成從本地下載!?
根據(jù)上面報(bào)錯(cuò)的下載鏈接,找到獲取下載地址的代碼:
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 站點(diǎn),每次報(bào)錯(cuò)后終止程序。
再根據(jù)報(bào)錯(cuò)鏈接,使用下載工具下載原始鏈接,放置在本地站點(diǎn)對(duì)應(yīng)目錄,然后重新運(yùn)行 ??restore.cmd?? 即可。
?吐槽一下:其中一個(gè)文件下了4個(gè)小時(shí)。囧rz?
3.獲取 submodule 源碼
經(jīng)過多次重試,總算全部下載成功了。
但是,又顯示了另一個(gè)錯(cuò)誤:
參照 BuildFromSource.md,發(fā)現(xiàn)我們 clone 時(shí)掉了參數(shù) ??--recursive??:
git clone --recursive https://github.com/YOUR_USERNAME/aspnetcore
幸好還可以補(bǔ)救:
git submodule update --init --recursive
重新運(yùn)行??restore.cmd??
順利完成。
4.編譯
但是,當(dāng)我們使用 VS2022 編譯 dotnet/aspnetcore 的任意一個(gè)項(xiàng)目時(shí),卻提示找不到指定SDK:
原來它是在找 SDK 7.0:
"sdk": { ? ? "version": "7.0.100-preview.2.22103.2" ? }
而這個(gè) SDK 其實(shí)在前面的步驟已經(jīng)安裝在源碼目錄下了。
因此,只需要將源碼目錄下 SDK 路徑,例如 ??E:\Codes\aspnetcore\.dotnet\sdk???,加入到 ??PATH?? 環(huán)境變量中。
5.測(cè)試
但是,當(dāng)我們運(yùn)行測(cè)試時(shí),卻提示找不到測(cè)試用例。
根據(jù)錯(cuò)誤提示:
我們把源碼目錄下的對(duì)應(yīng)路徑下的所有內(nèi)容, 例如 ??E:\Codes\aspnetcore\.dotnet\shared\Microsoft.NETCore.App???,復(fù)制到 ??C:\Program Files\dotnet\shared\Microsoft.NETCore.AppA?? 目錄中。
再次運(yùn)行測(cè)試成功.
結(jié)論:
這次編譯碰到的主要問題,還是由于訪問國(guó)外的網(wǎng)速太慢造成的。
但是和用于 dotnet/runtime 的解決思路不同。
到此這篇關(guān)于編譯 dotnet/aspnetcore 源代碼詳情的文章就介紹到這了,更多相關(guān)編譯dotnet/aspnetcore 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
asp.net通過Ajax UpdatePanel回傳后滾動(dòng)條位置變更解決方法
用一個(gè)隱藏控件保存當(dāng)前scorll值?;貍骰貋砗蟾鶕?jù)scroll的值在重新設(shè)置scroll。2010-06-06ASP.NET Core文件壓縮常見使用誤區(qū)(最佳實(shí)踐)
本文給大家分享ASP.NET Core文件壓縮常見的三種誤區(qū),就每種誤區(qū)給大家講解的非常詳細(xì),是項(xiàng)目實(shí)踐的最佳紀(jì)錄,對(duì)ASP.NET Core文件壓縮相關(guān)知識(shí)感興趣的朋友一起看看吧2021-05-05asp.net開發(fā)微信派發(fā)現(xiàn)金紅包/H5網(wǎng)頁(yè)搶紅包功能(思路詳解)
這篇文章主要介紹了asp.net開發(fā)微信派發(fā)現(xiàn)金紅包/H5網(wǎng)頁(yè)搶紅包功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03AspNetPager與Socut.Data使用實(shí)例代碼
最近對(duì)AspNetPager與Socut.Data這兩個(gè)控件產(chǎn)生了濃厚的興趣,這兩個(gè)控件配合可以減輕很多程序員編寫代碼的壓力。ASpNetPager為分頁(yè)控件,而Socut.Data為數(shù)據(jù)操作控件,ACCESS,MSSQL都可以。2008-07-07asp.net listbox實(shí)現(xiàn)單選全選取消
這篇文章主要介紹了asp.net listbox單選全選取消的應(yīng)用,需要的朋友可以參考下2014-02-02asp.net下UTF-7轉(zhuǎn)GB2312編碼的代碼(中文)
UTF-7轉(zhuǎn)換GB2312編碼的方法2010-07-07注冊(cè)或者點(diǎn)擊按鈕時(shí),怎么防止用戶重復(fù)提交數(shù)據(jù)(實(shí)例講解)
這篇文章主要是對(duì)注冊(cè)或者點(diǎn)擊按鈕時(shí),怎么防止用戶重復(fù)提交數(shù)據(jù)進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12asp.net中利用ajax獲取動(dòng)態(tài)創(chuàng)建表中文本框的值
通常在做主從表的數(shù)據(jù)錄入中,會(huì)碰到在一個(gè)頁(yè)面上同時(shí)錄入主表數(shù)據(jù)和從表數(shù)據(jù),主表的數(shù)據(jù)只有一條,從表的數(shù)據(jù)有一條到多條,這樣就要?jiǎng)討B(tài)創(chuàng)建從表數(shù)據(jù)錄入入口。2010-03-03