iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0

昨天,我理解了一件以前從來沒有認真思考過的事情。

CPU 根本看不懂 C#。

真正看懂我程式的人,是 Compiler。

而 Compiler 在完成檢查後,才會開始進行編譯。

但是新的 Why 又出現了。
每天寫程式時,我幾乎都會按下:

Build

Visual Studio 也常常跳出:

Build succeeded.

可是Build 到底做了什麼?

如果它真的很重要。

為什麼按完 Build,我的程式卻沒有執行?

今天,我決定親自做實驗,而不是直接查答案。
以前的我一直認為:

Build 就是把程式跑起來。

因為平常按下 F5。

程式就會執行。

所以我一直把:

Build

Run

當成同一件事情。

直到今天。

我才開始懷疑:

如果 Build 就是執行程式。

那為什麼會叫做:

Build(建置)

而不是:

Run(執行)


Build 前後到底有什麼不同?

首先先執行

dotnet clean

本我以為:

它會把整個 bin、obj 都刪掉。

結果卻發現:

-bin 的建置輸出被清除
-obj 仍然保留部分檔案
-NuGet 相關檔案也還存在

這和我原本想像的不一樣。

代表Clean 並不是把整個專案清空,而是清除 Build 所產生的輸出成果。
https://ithelp.ithome.com.tw/upload/images/20260805/20183395bndk3ELQzQ.png
https://ithelp.ithome.com.tw/upload/images/20260805/20183395lSIVPcDrVX.png

接著我重新執行

dotnet build

接著就出現
https://ithelp.ithome.com.tw/upload/images/20260805/20183395OxBKw4bYzL.png

突然多出了很多以前從來沒有認真看過的檔案。

Build 看起來真的做了不少事情。

但是新的問題又來了。


Build 真的會執行程式嗎?

我把程式改成

Console.WriteLine("Day4");

然後再次執行:

dotnet build

我原本以為終端機應該會印出:

Day4

結果什麼都沒有。

只有: Build succeeded.

程式完全沒有執行。
https://ithelp.ithome.com.tw/upload/images/20260805/20183395Al4Hs6cgkL.png


Run 又做了什麼?

接著我改成執行:

dotnet run --project .\src\MiniWebFramework\MiniWebFramework.csproj

這次終端機終於印出了: Day4

也就是說真正執行程式的人不是 Build而是Run
https://ithelp.ithome.com.tw/upload/images/20260805/20183395QS21C2teIQ.png

完成今天的三個實驗後,我開始查閱 Microsoft 官方文件。

官方指出,dotnet build 的工作是:

將原始程式碼編譯,並產生可供執行的輸出成果。

也就是說它的工作包含:

-編譯程式
-建立組件(Assembly)
-產生執行所需的檔案

但不會執行程式本身。

真正執行程式的是 dotnet run,它會在需要時先完成建置,再啟動程式開始執行。

這和今天的實驗結果完全一致。


昨天的我:

Build = Run

今天的我:

Build 是準備程式,Run 才是真正開始執行程式。

Build 並不是程式執行的一部分。

它更像是一位幕後工作人員。

在正式開演之前,先把舞台、燈光、道具全部準備好。

等一切都完成後才真正開始表演。

今天,我還沒有開始撰寫自己的 Framework。

但是我開始理解了一件很重要的事情。

未來每增加一個 Router、Middleware 或 HttpContext。

都必須重新 Build。

只有完成 Build。

新的程式碼才會變成可以執行的成果。

因此,理解 Build 的角色,也是理解 Framework 建構流程的重要一步。

今天,我知道了 Build 並不是執行程式,它只是把程式準備好。

但是新的?又來了當 Build 完成後,專案裡突然多出了

MiniWebFramework.dll

MiniWebFramework.exe

MiniWebFramework.pdb

MiniWebFramework.deps.json

MiniWebFramework.runtimeconfig.json

以前的我從來沒有打開過它們,甚至不知道它們存在的目的。

為什麼 Build 需要產生這麼多檔案?下一篇,我想一個一個拆開它們,看看它們各自負責什麼工作。


上一篇
如果 CPU 看不懂 C#,那到底是誰看得懂?
系列文
程式設計沒有告訴你的事:30 天破解每一個 Why4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言