asp.net core 8路由404主因是注册顺序错误,必须按“具体→通用”顺序注册,如先mapget("/api/{id}")再mapcontrollerroute("default"),否则宽泛路由提前拦截导致后续精确路由失效。

能直接用,但默认配置下调试会失败、热重载不生效、MVC路由报404——关键在 launch.json、tasks.json 和 .NET SDK 版本协同。
dotnet --version 返回 8.0.x 但 dotnet new webapp 报错“无法解析模板”
这是 SDK 安装后未刷新模板缓存的典型表现,不是版本不兼容。新版 .NET SDK(如 8.0.400)自带 ASP.NET Core 模板,但 CLI 有时不会自动加载。
- 先运行
dotnet new --install Microsoft.AspNetCore.Mvc.Templates::8.0.400显式安装 MVC 模板(把版本号替换成你dotnet --version输出的实际值) - 再执行
dotnet new list,确认输出中包含webapp和mvc两项 - 如果仍缺模板,删掉
~/.templateengine目录(macOS/Linux)或%USERPROFILE%\.templateengine(Windows),重启终端重试
launch.json 中 program 字段指向 .dll 还是 .exe?
跨平台调试必须用 .dll,哪怕在 Windows 上。VS Code 的 C# 扩展(OmniSharp)依赖 .NET Core 运行时启动机制,硬写 .exe 会导致“无法启动进程”或“找不到指定模块”错误。
- 正确写法:
"program": "${workspaceFolder}/bin/Debug/net8.0/MyWebApp.dll" - 路径中的
net8.0必须与项目文件.csproj里<targetframework></targetframework>值完全一致(比如改成net9.0就得同步改) - 别手动拼路径——首次打开项目时,VS Code 提示 “Required assets to build and debug are missing” 时点 Yes,它自动生成的
launch.json通常已填对program,只需检查是否匹配当前 TargetFramework
dotnet watch run 启动后修改 Razor 页面(.cshtml)不刷新
这是 ASP.NET Core 6+ 默认禁用 Razor 编译热重载导致的,和 VS Code 无关,而是运行时行为变化。
- 确保项目文件
.csproj中有<propertygroup><aspnetcorehostingmodel>InProcess</aspnetcorehostingmodel></propertygroup>(非必需,但可减少干扰) - 启动命令必须加
--hot-reload:运行dotnet watch run --hot-reload - Razor 文件变更需保存后等待 1–2 秒,浏览器手动刷新(F5)才能看到效果;自动刷新需启用
dotnet watch --project YourApp.csproj run --no-https --urls http://localhost:5000并配合浏览器 Live Server 插件 - 若仍无效,检查
Program.cs是否调用了AddRazorRuntimeCompilation()(仅开发环境需要,发布时应移除)
vscode-solution-explorer 插件加载 .sln 失败或项目引用灰色
该插件依赖 .sln 文件显式包含所有 .csproj,而 dotnet new webapp 默认不生成解决方案文件,直接建项目文件夹。
- 补全方案文件:
dotnet new sln -n MySolution,再用dotnet sln add MyWebApp.csproj加入 - 插件只识别
.sln根目录下的项目,不能跨文件夹层级加载;若项目在src/MyWebApp,需先cd src再dotnet sln add MyWebApp.csproj - 插件右键菜单里的“Add NuGet Package”功能在 .NET 8+ 中可能失效,建议改用 CLI:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
最易被忽略的是 global.json 文件——当你机器上装了多个 SDK(比如 7.0 和 8.0),没它的话 dotnet 命令可能默认用旧版,导致 launch.json 路径错、dotnet watch 不识别新特性。项目根目录加一行:{ "sdk": { "version": "8.0.400" } },立刻解决多数“明明装了新 SDK 却不生效”的问题。











