編譯?dotnet和aspnetcore?源代碼詳情
前言:
為 dotnet/aspnetcore 修改 issue,但是在 clone 代碼后,發(fā)現(xiàn)要編譯成功,遠(yuǎn)沒有想象中那么容易。
因此,將整個過程進(jìn)行記錄,以供大家參考。
?以下操作都是在 Windows 10 下完成。?
0.環(huán)境準(zhǔn)備
詳見官方文檔:《使用源碼編譯 ASP.NET Core》中的“Step 2: Install pre-requisites”。
我的機(jī)器只提前裝了 Visual Studio 2022,JDK 和 NodeJS。
大家可以自行按需安裝。
1.還原存儲庫
按照 ?BuildFromSource.md? 的描述,在命令行窗口進(jìn)入代碼所在目錄,輸入如下命令開始還原存儲庫:
restore.cmd
等待少許,就碰到了第一個錯誤:

這一看就是下載超時了,??這該死的網(wǎng)絡(luò)!??
2.暗渡陳倉
找到下載命令所在文件 ??.dotnet\dotnet-install.ps1??,發(fā)現(xiàn)代碼邏輯比較復(fù)雜,不太好修改。
?不過,轉(zhuǎn)念一想,既然遠(yuǎn)程下載慢,那不如改成從本地下載!?
根據(jù)上面報(bào)錯的下載鏈接,找到獲取下載地址的代碼:
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)錯后終止程序。
再根據(jù)報(bào)錯鏈接,使用下載工具下載原始鏈接,放置在本地站點(diǎn)對應(yīng)目錄,然后重新運(yùn)行 ??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
幸好還可以補(bǔ)救:
git submodule update --init --recursive
重新運(yùn)行??restore.cmd?? 順利完成。
4.編譯
但是,當(dāng)我們使用 VS2022 編譯 dotnet/aspnetcore 的任意一個項(xiàng)目時,卻提示找不到指定SDK:

原來它是在找 SDK 7.0:
"sdk": {
? ? "version": "7.0.100-preview.2.22103.2"
? }而這個 SDK 其實(shí)在前面的步驟已經(jīng)安裝在源碼目錄下了。
因此,只需要將源碼目錄下 SDK 路徑,例如 ??E:\Codes\aspnetcore\.dotnet\sdk???,加入到 ??PATH?? 環(huán)境變量中。
5.測試
但是,當(dāng)我們運(yùn)行測試時,卻提示找不到測試用例。
根據(jù)錯誤提示:

我們把源碼目錄下的對應(yīng)路徑下的所有內(nèi)容, 例如 ??E:\Codes\aspnetcore\.dotnet\shared\Microsoft.NETCore.App???,復(fù)制到 ??C:\Program Files\dotnet\shared\Microsoft.NETCore.AppA?? 目錄中。
再次運(yùn)行測試成功.
結(jié)論:
這次編譯碰到的主要問題,還是由于訪問國外的網(wǎng)速太慢造成的。
但是和用于 dotnet/runtime 的解決思路不同。
到此這篇關(guān)于編譯 dotnet/aspnetcore 源代碼詳情的文章就介紹到這了,更多相關(guān)編譯dotnet/aspnetcore 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
asp.net通過Ajax UpdatePanel回傳后滾動條位置變更解決方法
用一個隱藏控件保存當(dāng)前scorll值。回傳回來后根據(jù)scroll的值在重新設(shè)置scroll。2010-06-06
ASP.NET Core文件壓縮常見使用誤區(qū)(最佳實(shí)踐)
本文給大家分享ASP.NET Core文件壓縮常見的三種誤區(qū),就每種誤區(qū)給大家講解的非常詳細(xì),是項(xiàng)目實(shí)踐的最佳紀(jì)錄,對ASP.NET Core文件壓縮相關(guān)知識感興趣的朋友一起看看吧2021-05-05
asp.net開發(fā)微信派發(fā)現(xiàn)金紅包/H5網(wǎng)頁搶紅包功能(思路詳解)
這篇文章主要介紹了asp.net開發(fā)微信派發(fā)現(xiàn)金紅包/H5網(wǎng)頁搶紅包功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
AspNetPager與Socut.Data使用實(shí)例代碼
最近對AspNetPager與Socut.Data這兩個控件產(chǎn)生了濃厚的興趣,這兩個控件配合可以減輕很多程序員編寫代碼的壓力。ASpNetPager為分頁控件,而Socut.Data為數(shù)據(jù)操作控件,ACCESS,MSSQL都可以。2008-07-07
asp.net listbox實(shí)現(xiàn)單選全選取消
這篇文章主要介紹了asp.net listbox單選全選取消的應(yīng)用,需要的朋友可以參考下2014-02-02
asp.net下UTF-7轉(zhuǎn)GB2312編碼的代碼(中文)
UTF-7轉(zhuǎn)換GB2312編碼的方法2010-07-07
注冊或者點(diǎn)擊按鈕時,怎么防止用戶重復(fù)提交數(shù)據(jù)(實(shí)例講解)
這篇文章主要是對注冊或者點(diǎn)擊按鈕時,怎么防止用戶重復(fù)提交數(shù)據(jù)進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12
asp.net中利用ajax獲取動態(tài)創(chuàng)建表中文本框的值
通常在做主從表的數(shù)據(jù)錄入中,會碰到在一個頁面上同時錄入主表數(shù)據(jù)和從表數(shù)據(jù),主表的數(shù)據(jù)只有一條,從表的數(shù)據(jù)有一條到多條,這樣就要動態(tài)創(chuàng)建從表數(shù)據(jù)錄入入口。2010-03-03

