6

如何正確建置 ASP.NET MVC 5 原始碼並對原始碼進行分析研究

 3 years ago
source link: https://blog.miniasp.com/post/2021/07/17/ASPNET-MVC-5-Build-Source-Code-and-Analysis-Tips
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

上次寫這個主題已經是 2009/2/8 的事情了,原來我已經用 ASP.NET MVC 寫了超過 12 年。時至今日 ASP.NET MVC 5 已經非常穩定,而且微軟還有團隊在維護這套框架,但不會增加新功能,只會修正社群回報的 Bug 而已。由於最近正在進行 ASP.NET MVC 5 開發實戰課程,我也非常建議學員可以下載原始碼回來研究,所以這篇文章我將說明下載原始碼編譯的幾個重要步驟。

準備能夠成功建置 ASP.NET MVC 5 原始碼的基本環境

  1. 下載 .NET Core 2.1 SDK

    目前最新版的 .NET Core 2.1 SDK 有分兩個版本,分別是支援 Visual Studio 2017 的 v2.1.524 版本,以及支援 Visual Studio 2019 的 v2.1.816 版本。

    🔥 請務必安裝支援 Visual Studio 2017.NET Core 2.1 SDK 版本!

    以下是快速自動安裝的 PowerShell 命令:

    Invoke-WebRequest https://download.visualstudio.microsoft.com/download/pr/c72a8b51-d3ef-4900-b950-55c9707c63d3/76948b5f23d012affb30f2cc24d3131e/dotnet-sdk-2.1.524-win-x64.exe -outfile $env:temp\dotnet-sdk-2.1.524-win-x64.exe
    Start-Process $env:temp\dotnet-sdk-2.1.524-win-x64.exe -ArgumentList '/quiet' -Wait
    
  2. 安裝 Visual Studio 2017 建置工具

    安裝 Visual Studio 2017 Build Tools.NET Core build tools workload for Visual Studio 2017 Build Tools 這兩個 Chocolatey 套件即可。

    choco install visualstudio2017buildtools visualstudio2017-workload-netcorebuildtools -y
    

下載原始碼並編譯專案

目前最新版 ASP.NET MVC 原始碼都放在 aspnet/AspNetWebStack 這個 GitHub Repo 下,但事實上這個是一個蠻大的專案,其原始碼涵蓋了 ASP.NET MVC 5.x, Web API 2.x, 與 Web Pages 3.x 等框架,其中還包含了許多範例程式單元測試程式碼,非常具有參考價值,也是個非常棒的學習資源!

  1. 下載最新版 ASP.NET MVC 原始碼 (僅下載 v3.2.7 版本的原始碼)

    git clone https://github.com/aspnet/AspNetWebStack.git -b v3.2.7 --depth=1
    cd AspNetWebStack
    

    注意:使用 --depth=1 只會下載指定分支/標籤下最新一個版本的 Git 物件,下載速度極快,但看不到其他歷史版本!

  2. 檢查原始碼中的 global.json 檔案中的 .NET Core SDK 版本

    請手動修改該檔案的 version 屬性,改成你剛剛安裝的 .NET Core 2.1 SDK 版本 (Visual Studio 2017)

    {
        "sdk": {
            "version": "2.1.524"
        }
    }
    
  3. 由於 GitHub Repo 上面並沒有說明如何建置該專案,基本上建議你用以下命令建置,成功率將會大增!

    build.cmd Build /p:BuildPortable=false
    
  4. 執行所有的 xUnit 單元測試程式

    先執行 EnableSkipStrongNames 目標,否則你將無法成功執行 xUnit 測試程式

    build.cmd EnableSkipStrongNames
    

    直接執行 build.cmd 命令即可開始跑所有測試

    build.cmd
    

    我有發現 GenerateTokenHtmlEncodesValues() 測試方法在我的電腦無法成功通過單元測試,不太確定是什麼問題。我有開一個 Issue #301 追蹤這個問題。如果要通過這個測試,可以暫時手動跳過這個測試,只要在 [Fact] 改成 [Fact(Skip = "Might be a bug")] 即可。

使用 Visual Studio 2019 分析 ASP.NET MVC 5 原始碼的技巧

如果你想直接以 Visual Studio 2019 開啟專案,請開啟 Runtime.sln 方案檔進行建置。

開啟方案總管即可看到所有 ASP.NET Web Stack 的所有原始碼:

Runtime

以下我分享幾個查找原始碼的技巧:

  1. 善用 Ctrl+, 快速查找檔案

    快速查找檔案

  2. 善用 與使用中文件同步處理 功能快速開啟檔案在方案總管中的位置

    Sync with Active Document

  3. 善用方案總管去尋找一個抽象類別衍生類型(Derived Types)/實作者(Implements) (超級實用!)

    善用方案總管去尋找一個抽象類別的衍生類型

    方案總管 / 衍生類型

  4. 尋找 ASP.NET MVC 應用程式的啟動點:MvcHandler

    ASP.NET MVC 5 框架其實是一個 IHttpHandler 的實作,所以你要找到一個名為 MvcHandler 的類別,裡面有個 IHttpHandler.ProcessRequest(HttpContext httpContext) 方法,就是整個 ASP.NET MVC 5 的啟始點,從這裡開始看程式,你將會發現許多鮮為人知的寶貝與程式寫法! 👍


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK