ASP.NET Core - 001 源碼編譯與調試


一、源碼編譯

需要編譯的源碼的代碼倉庫有兩個,一個是 aspnetcore,另外一個是 extensions

如果有代理,編譯的過程比較簡單,參考微軟的文檔進行編譯即可。

如果沒有代理,那么整個編譯流程可能非常慢,甚至無法正常進行,可以B站這個視頻執行編譯:編譯並調試 Asp.Net Core 源碼 —— B站視頻

如果使用代理軟件,建議使用 Global(全局)代理,同時命令行與 Powershell 需要設置代理:

# CMD set http_proxy=http://127.0.0.1:7890 & set https_proxy=http://127.0.0.1:7890 # Powershell $Env:http_proxy="http://127.0.0.1:7890";$Env:https_proxy="http://127.0.0.1:7890" 

編譯時可能出現的錯誤:C4819 或其他的錯誤。實際代碼是沒有問題的,是編碼的鍋,解決方案:系統編碼設置使用 UTF-8

系統設置 → 時間和語言 → 語言 → 相關設置 → 管理語言設置 → 管理 → 更改系統區域設置 → 勾選:使用 Unicode UTF-8 提供全球語言支持

設置以后重啟系統即可,網上反饋設置后部分軟件可能出現亂碼,目前我沒發現類似問題。但是,我第一次設置后,系統所有圖標丟失,部分軟件無法正常使用,但是取消選項又重新勾選了一次就正常了,如果像我一樣出現問題,可以多設置幾次試試。

補:發現了一個小問題,登錄穿越火線,頻道名、房間名、游戲玩家昵稱的中文不顯示了。/(ㄒoㄒ)/~~

二、調試

后續需要學習 ASP.NET Core,並深入了解其實現原理,所以肯定希望能夠直接調試源碼。

這里提供兩個調試方案,第一個方案是借助調試工具 dnSpy 來進行調試,第二則是直接使用 Visual Studio 進行調試。

1. dnSpy 反編譯調試

首先需要下載 dnSpy:dnSpy/dnSpy: .NET debugger and assembly editor (github.com),解壓后可以直接打開。

然后我們可以隨意創建一個 ASP.NET Core 的示例項目,打開 Visual Studio Code,創建一個 MVC 項目並編譯。

dotnet new mvc -n 002_Debug
dotnet build

找到生成的 002_Debug.dll 拖到 dnSpy 中,找到程序入口設置斷點並運行,即可進入調試:

debug-with-dnspy

 

2. 源服務器支持

首先如果是使用 Visual Studio Code,設置 launch.json 文件,增加如下內容:

//關閉 “僅我的代碼” 項 "justMyCode": false, "symbolOptions": { //查找並下載symbol文件 "searchMicrosoftSymbolServer": true } 

debug-with-vsc

 

如果時使用 Visual Studio:

選項 → 調試 → 常規 → 取消 “僅我的代碼” 的勾選 → 勾選 “啟用源鏈接支持”
選項 → 調試 → 符號 → 符號文件(.pdb)的位置 → 勾選 “Microsoft 符號服務器”

配置完成后,調試時將會下載符號文件,可以正常調試 ASP.NET Core 的源代碼。

debug-with-vs

 

3. 使用源碼調試

首先是 ASP.NET Core,前文我們已經進行了編譯,我們可以在 \artifacts\installers\Debug 找到 aspnetcore-runtime-3.1.9-dev-win-x64.msi 進行安裝。

然后是 .NET Extensions,我們可以在項目中創建一個 NuGet.config,然后配置本地程序包源:

<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <clear/> <addkey="local1"value="C:\Users\hd2y\code\extensions\artifacts\packages\Debug\Shipping"/> <addkey="local2"value="C:\Users\hd2y\code\aspnetcore\artifacts\packages\Debug\Shipping"/> <addkey="nuget.org"value="https://api.nuget.org/v3/index.json"protocolVersion="3"/> </packageSources> </configuration> 

這時,運行程序進入調試,就可以通過單步調試進入 ASP.NET Core 的源碼。

如果以上操作無法正常調試,可以 F12 查看對應的方法的程序集版本。

例如我的程序集版本是 3.1.10,而我編譯的 ASP.NET Core 的版本是 3.1.9,調試就無法正常進入。

這里有兩種解決方案,第一種是查看 3.1.9 的版本對應的 .NET SDK 的版本進行安裝,然后指定引用程序集的版本:

<ProjectSdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <RootNamespace>_002_Debug</RootNamespace> </PropertyGroup> <ItemGroup> <PackageReferenceInclude="Microsoft.Extensions.Hosting"Version="3.1.9"/> </ItemGroup> </Project> 

不指定版本的話,在我測試的時候不知道為什么轉到定義程序集版本是 3.1.8,而不是文檔中提到的 3.1.9
直接指定會使用 NuGet.config 配置的本地程序包源,如果設置后發現仍舊不行,可能 NuGet 有緩存,需要在 選項 → NuGet 包管理器 → 常規 → 清除所有 NuGet 緩存。

第二種方案是根據當前 .NET SDK 對應的 ASP.NET Core 版本,重新進行編譯,具體版本對應關系可以查看 .NET Core SDK 的下載頁:Download .NET Core 3.1 (Linux, macOS, and Windows) (microsoft.com)

 

轉自 https://www.hd2y.net/archives/asp-dotnet-core-001-source-code-compilation-and-debugging


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM