首頁 > 軟體

編譯 dotnet和aspnetcore 原始碼詳情

2022-03-14 19:00:54

前言:

為 dotnet/aspnetcore 修改 issue,但是在 clone 程式碼後,發現要編譯成功,遠沒有想象中那麼容易。

因此,將整個過程進行記錄,以供大家參考。

​以下操作都是在 Windows 10 下完成。​

0.環境準備

詳見官方檔案:《使用原始碼編譯 ASP.NET Core》中的“Step 2: Install pre-requisites”。

我的機器只提前裝了 Visual Studio 2022,JDK 和 NodeJS。

大家可以自行按需安裝。

1.還原儲存庫

按照 ​BuildFromSource.md​ 的描述,在命令列視窗進入程式碼所在目錄,輸入如下命令開始還原儲存庫:

restore.cmd

等待少許,就碰到了第一個錯誤:

這一看就是下載超時了,​​這該死的網路!​​

2.暗渡陳倉

找到下載命令所在檔案 ​​.dotnetdotnet-install.ps1​​,發現程式碼邏輯比較複雜,不太好修改。

​不過,轉念一想,既然遠端下載慢,那不如改成從本地下載!​

根據上面報錯的下載連結,找到獲取下載地址的程式碼:

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
}

現在,只需要在本地建立 IIS 站點,每次報錯後終止程式。

再根據報錯連結,使用下載工具下載原始連結,放置在本地站點對應目錄,然後重新執行 ​​restore.cmd​​ 即可。

​吐槽一下:其中一個檔案下了4個小時。囧rz​

3.獲取 submodule 原始碼

經過多次重試,總算全部下載成功了。

但是,又顯示了另一個錯誤:

參照 BuildFromSource.md,發現我們 clone 時掉了引數 ​​--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 其實在前面的步驟已經安裝在原始碼目錄下了。

因此,只需要將原始碼目錄下 SDK 路徑,例如 ​​E:Codesaspnetcore.dotnetsdk​​​,加入到 ​​PATH​​ 環境變數中。

5.測試

但是,當我們執行測試時,卻提示找不到測試用例。

根據錯誤提示:

我們把原始碼目錄下的對應路徑下的所有內容, 例如 ​​E:Codesaspnetcore.dotnetsharedMicrosoft.NETCore.App​​​,複製到 ​​C:Program FilesdotnetsharedMicrosoft.NETCore.AppA​​ 目錄中。

再次執行測試成功.

結論:

這次編譯碰到的主要問題,還是由於存取國外的網速太慢造成的。

但是和用於 dotnet/runtime 的解決思路不同。

到此這篇關於編譯 dotnet/aspnetcore 原始碼詳情的文章就介紹到這了,更多相關編譯dotnet/aspnetcore 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com