VS2019运行.NET 5 Kestrel API时忽略launchSettings.json的applicationUrl配置
特定虚拟机无法加载launchSettings.json自定义端口的排查与解决
针对这台单独出现的、无论换目录重装都跑5000/5001默认端口的问题,按照踩坑优先级从高到低列可落地的排查动作:
先核对Visual Studio实际执行的启动逻辑
- 检查VS顶部调试工具栏的启动配置下拉框,确认当前选中的不是默认的“IIS Express”或者空配置项,必须选中和你launchSettings.json里对应的
My.Api配置 - 右键项目选择「属性→调试」,直接看页面上的下拉选项:
- 确认选中的启动配置是
My.Api - 重点检查有没有勾选「不使用启动配置文件启动」选项 ——这个选项的等效命令就是
dotnet run --no-launch-profile,会完全绕过所有launchSettings.json的配置,直接走默认Kestrel端口,很多人手滑改完设置之后几个月都注意不到这个勾选项
- 确认选中的启动配置是
- 不要默认你改的launchSettings.json就是VS实际读的那份:确认文件路径严格是
项目根目录/Properties/launchSettings.json,很多时候仓库层级混乱,会在仓库根目录、解决方案外层文件夹存了一份旧的同名配置,VS实际解析的是Properties目录下没被你改过的旧文件
排查绕开目录的全局配置干扰
因为你换了新文件夹克隆项目问题依旧,大概率问题不在项目文件夹本身,而在虚拟机的全局用户配置层面:
- 打开当前Windows用户的环境变量面板,搜索有没有手动设置过
ASPNETCORE_URLS变量:这个变量的优先级比launchSettings.json里的applicationUrl高,只要你在用户环境变量里把这个值设成了http://localhost:5000;https://localhost:5001,不管项目里怎么改配置,Kestrel都会优先用环境变量里的端口,换再多项目目录都不解决问题 - 检查launchSettings.json的文件编码:如果这个文件被存成了UTF-16格式,VS的配置解析器会直接读失败,fallback到默认端口。用记事本打开文件,点「另存为」看底部的编码选项,确认是UTF-8格式,改完覆盖原文件再试
- 清理VS的本地项目缓存:关闭VS之后,删掉项目目录下的隐藏
.vs文件夹,这个文件夹里存了上次调试的配置快照,很多时候你改完launchSettings,VS还在调用缓存里的旧端口配置,哪怕文件内容已经改对了也不生效
验证低概率触发场景
- 检查
.csproj文件里的文件映射配置:正常情况下launchSettings.json不会被打包到输出目录,如果之前改项目的时候不小心加了类似<None Include="Properties\launchSettings.json" CopyToOutputDirectory="Never" />的配置,会导致VS读不到这个配置文件 - 临时禁用所有第三方VS扩展(比如Docker工具、远程调试扩展、老版本的代码辅助工具),重启VS再启动项目验证:有些旧扩展会篡改VS的默认调试启动参数,等效加了
--no-launch-profile的命令,这个行为不会在项目配置里留任何痕迹,禁用扩展之后如果能正常读自定义端口,就定位到是哪个扩展的问题 - 跑一次显式的命令验证:在项目目录下打开PowerShell,直接执行
dotnet run --launch-profile "My.Api",如果这个命令能正确在7000/7001端口启动,说明项目和配置文件本身完全没问题,问题100%出在VS的启动参数或者本地扩展的干扰上
内容的提问来源于stack exchange,提问作者Bradford Dillon
相关产品推荐
相关产品推荐

