習慣了 Visual Studio 「F5 一鍵運行」的開發者,是否理解源碼如何變為可執行機器碼?本文帶你拋棄 IDE,用記事本 + csc.exe + ngen.exe 手動構建程序,直觀體驗 CLR 的**編譯期**與**運行期**全生命週期。
HelloWorld.txt,寫入標準 C# 代碼。csc /out:Hello.exe HelloWorld.txtHello.exe,直接運行即輸出「Hello World」。



csc.exe) 將每個源文件編譯為托管模塊(含 IL 代碼、元數據、CLR Header)。.exe/.dll),即部署單元。文件屬性「生成操作」的本質:告訴編譯器如何處理文件——Compile (編入模塊)、Embedded Resource (嵌入程序集)、Content (複製輸出目錄) 等。


程序集內的 IL 是 CPU 無關的中間語言。首次調用時,CLR 執行:
首次運行慢、二次極快的原因:
Console.WriteLine("Hello"); // 首次調用:JIT 編譯 → 執行
Console.WriteLine("World!"); // 二次調用:直接跳轉緩存的機器碼,跳過 JIT
模擬大量類型加載延遲:

ngen.exe 將 IL 預編譯為機器碼並存入 Native Image Cache,解決兩大痛點:
ngen install Hello.exe 後瞬間啟動。
ASP.NET 專用預編譯工具:aspnet_compiler.exe。
理解 源碼 → IL → JIT → 機器碼 的轉換鏈路,是診斷啟動性能、內存佔用、異常調試的基石。脫離 IDE 動手操作一次,勝過讀十遍文檔。