iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0

2. Build 原始碼倉庫

# 取得原始碼
git clone https://github.com/dotnet/sdk.git
cd sdk

# Windows 建置(需已安裝 VS 跟 prerequisite)
build.cmd -c Release

# 快速編譯核心 CLI 可:
build.cmd -subset Cli -c Debug

常見前置:

  1. 安裝對應版本 .NET
  2. 安裝 Visual Studio / Build Tools,需要有含 MSVC、C++ toolset

3. 目錄結構速覽

目錄 用途 重點檔案 / 子目錄
src/Cli 解析使用者輸入的 dotnet <command> 指令框架 dotnet/Program.cs、命令註冊表、help 系統
src/Tasks MSBuild Task 實作(例如解析資產、生成 deps.json) GenerateDepsFile, ResolvePackageAssets
src/Resolvers Sdk / 工作負載解析邏輯 SdkResolver* 類別
src/StaticWebAssetsSdk Web 靜態資產佈署/融合 Razor / Blazor 建置鏈結合
src/Workload* 工作負載安裝、更新、manifest 管理 安裝策略、Roll-forward 檢查
src/Assets 預置模板、targets、props Microsoft.NET.Sdk.*.targets/props
templates CLI 內建或測試模板 console / classlib / minimal api
eng/ 建置腳本、版本管理(Version.Details.xml) 來源依賴版本鎖定
artifacts/ 建置輸出 bin / log / package

4. CLI 指令執行流程

dotnet build MyProj.csproj
    ├─ 啟動 host (apphost) 載入 dotnet.dll
    ├─ 解析第一個引數:內建指令 / global tool / 路徑 / dll
    ├─ 建立命令模型(command descriptor)
    ├─ 解析與驗證參數、環境變數合併
    ├─ 呼叫對應 handler(例如 BuildCommand)
    │      └─ 建立 MSBuild Invocation (傳入 global properties)
    │             └─ MSBuild 評估專案 -> 執行 Targets & Tasks
    └─ 回傳 Exit Code

核心程式碼點:

  1. 參數解析:src/Cli/dotnet/Parser 相關類別(System.CommandLine 演進版)
  2. 指令表:BuiltInCommands.cs 收錄像 build / run / publish / restore ...
  3. Handler:各 Command.cs 建構 MSBuild Request 或執行特化流程(例如 workload install)
  4. 錯誤與遙測:統一透過 Reporting / Telemetry 模組

上一篇
.NET 10 SDK 與 CLI 原始碼閱讀
系列文
新 .NET & Azure & IoT & AI 開源技術實戰手冊 (含深入官方程式碼講解) 7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言