開發工具練習
這是一份可選附錄。完成第一步後,可以用同一個專案練習編輯、編譯和重新執行的迴圈;跳過它不影響後續章節。
練習使用的完整程式碼如下。請在第 02 章建立的 FirstSteps 專案目錄中執行本頁指令;如果使用儲存庫範例,則進入 samples/02-first-steps。
using Scalar.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenApi();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
app.MapScalarApiReference();
}
app.MapGet("/", () => new { Message = "Hello, ASP.NET Core!" });
app.Run();讓編譯器幫你檢查
C# 是靜態型別語言,很多錯誤在執行之前就會被發現。試著把第 15 行的 MapGet 故意寫錯成 MapGt,編輯器會立即標出紅色波浪線;執行 dotnet build 會看到:
Program.cs(15,5): error CS1061: “WebApplication”未包含“MapGt”的定义,并且找不到可接受第一个“WebApplication”类型参数的可访问扩展方法“MapGt”(是否缺少 using 指令或程序集引用?)錯誤資訊告訴你:在第 15 行第 5 列,WebApplication 型別上沒有 MapGt 這個成員。程式根本不會啟動,更不會在某個請求到來時才崩潰。
實驗後把 MapGt 改回 MapGet,確認 dotnet build 成功,再繼續下面的操作。診斷資訊的語言會隨 SDK 的語言設定變化。
同樣,在 app. 後面輸入 Map,編輯器會列出所有可用的方法(MapGet、MapPost、MapGroup……)並顯示它們的參數說明。型別資訊能幫助編輯器補全程式碼,也能為 OpenAPI 提供回應結構,減少重複維護。
使用 dotnet watch 自動重新載入
如果之前啟動的服務還在執行,先在它的終端按 Ctrl+C 停止。然後在同一個專案目錄中改用:
dotnet watch它會執行專案並監視檔案變化。啟動後把第 15 行的文字改成 "Hello, Hot Reload!" 並儲存,終端裡會出現:
dotnet watch ⌚ File updated: .\Program.cs
dotnet watch 🔥 C# and Razor changes applied in 1029ms.再次請求,內容已經變了,而且服務沒有重新啟動:
curl http://localhost:5080/{"message":"Hello, Hot Reload!"}這叫熱重新載入(Hot Reload):修改被直接套用到正在執行的程式中,記錄中的耗時會因機器而異。無法熱套用的修改可能觸發重新啟動提示;修改服務註冊等啟動設定後,應在 dotnet watch 終端按 Ctrl+R 重新啟動,確保已經執行過的啟動程式碼重新執行。
驗證完成後,將問候語改回 "Hello, ASP.NET Core!",再按 Ctrl+C 停止服務,避免影響後續章節的輸出和連接埠。
FastAPI 對照
dotnet watch 相當於 fastapi dev 或 uvicorn --reload。對於支援熱套用的改動,.NET 可以保留處理序和記憶體狀態;發生重新啟動時,記憶體狀態仍會丟失。
總結
- 編譯錯誤會指出檔案和位置,修正後用
dotnet build確認。 dotnet watch監視程式碼變化,支援的改動可以熱套用,無需重新啟動處理序。- 修改啟動設定後,用
Ctrl+R重新啟動;重新啟動會丟失記憶體狀態。
