如何正確建置 ASP.NET MVC 5 原始碼並對原始碼進行分析研究
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.
上次寫這個主題已經是 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 的啟始點,從這裡開始看程式,你將會發現許多鮮為人知的寶貝與程式寫法! 👍
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK