开发工具练习
这是一份可选附录。完成第一步后,可以用同一个项目练习编辑、编译和重新运行的循环;跳过它不影响后续章节。
练习使用的完整代码如下。请在第 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重启;重启会丢失内存状态。
