上次寫這個主題已經是 2009/2/8 的事情了,原來我已經用 ASP.NET MVC 寫了超過 12 年。時至今日 ASP.NET MVC 5 已經非常穩定,而且微軟還有團隊在維護這套框架,但不會增加新功能,只會修正社群回報的 Bug 而已。由於最近正在進行 ASP.NET MVC 5 開發實戰課程,我也非常建議學員可以下載原始碼回來研究,所以這篇文章我將說明下載原始碼編譯的幾個重要步驟。
準備能夠成功建置 ASP.NET MVC 5 原始碼的基本環境
-
下載 .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
-
安裝 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 等框架,其中還包含了許多範例程式與單元測試程式碼,非常具有參考價值,也是個非常棒的學習資源!
-
下載最新版 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 物件,下載速度極快,但看不到其他歷史版本!
-
檢查原始碼中的 global.json
檔案中的 .NET Core SDK 版本
請手動修改該檔案的 version
屬性,改成你剛剛安裝的 .NET Core 2.1 SDK 版本 (Visual Studio 2017)
{
"sdk": {
"version": "2.1.524"
}
}
-
建置專案
由於 GitHub Repo 上面並沒有說明如何建置該專案,基本上建議你用以下命令建置,成功率將會大增!
build.cmd Build /p:BuildPortable=false
-
執行所有的 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 的所有原始碼:
以下我分享幾個查找原始碼的技巧:
-
善用 Ctrl+,
快速查找檔案
-
善用 與使用中文件同步處理 功能快速開啟檔案在方案總管中的位置
-
善用方案總管去尋找一個抽象類別的衍生類型(Derived Types)/實作者(Implements) (超級實用!)
-
尋找 ASP.NET MVC 應用程式的啟動點:MvcHandler
ASP.NET MVC 5 框架其實是一個 IHttpHandler
的實作,所以你要找到一個名為 MvcHandler
的類別,裡面有個 IHttpHandler.ProcessRequest(HttpContext httpContext)
方法,就是整個 ASP.NET MVC 5 的啟始點,從這裡開始看程式,你將會發現許多鮮為人知的寶貝與程式寫法! 👍
相關連結