visual studio 启动配置文件(launchsettings.json)用于定义项目多种运行方式,支持kestrel/iis express切换、环境变量设置等,通过“调试”选项卡或“启动配置文件”页可视化编辑,仅限sdk风格项目生效。

新建项目后,Visual Studio 默认会把该项目设为启动项目(粗体显示),但“能启动”不等于“按你想要的方式启动”——比如你想用 Kestrel 而不是 IIS Express 运行 Web 项目,或想带特定环境变量调试控制台程序,就得手动配置启动项。核心操作不在“项目属性”里,而在 PropertieslaunchSettings.json 文件或其可视化界面。
如何快速打开 launchSettings.json 可视化编辑界面
右键点击解决方案资源管理器中的项目 → 选择「属性」→ 切换到「调试」选项卡(VS2019 及更早)或直接进入「启动配置文件」页(VS2022+)。这里列出所有 profile,包括默认的 Project、IIS Express 等。点击「新建」可添加自定义启动方式。
- VS2022 开始,该界面已脱离传统属性页,改用独立标签页,UI 更聚焦 profile 管理
- 如果「调试」选项卡完全不出现,说明项目类型不支持(如纯 C++ 控制台项目、.NET Framework WinForms 项目默认无此文件)
- 手动创建
PropertieslaunchSettings.json文件也能生效,但必须确保项目是 SDK 风格(如.csproj含<sdk>Microsoft.NET.Sdk.Web</sdk>)
commandName 是启动行为的开关,别乱填
commandName 决定 VS 怎么跑你的程序,常见值有:Project、IISExpress、Executable、DotNetCLI。填错会导致“启动失败但没报错”或“点 F5 没反应”。
Visual Studio 18.8.1 官方固定版本安装引导程序,当前条目使用微软发布历史中的 Professional Web Installer,适合旧项目兼容、环境回退、复现特定构建链和排查版本差异等场景。
-
Project:只适用于 Web SDK 项目(如 ASP.NET Core),自动调用dotnet run并监听端口 -
IISExpress:需确保 IIS Express 已安装且端口未被占用;若提示“无法启动 IIS Express”,先检查applicationUrl是否冲突 -
Executable:用于启动外部程序(如调试另一个进程),必须配全executablePath(支持$(DevEnvDir)等宏) -
DotNetCLI:显式走 CLI,适合需要精细控制dotnet参数的场景,但commandLineArgs里不能漏掉--project
环境变量和命令行参数写在哪?不是在项目属性里
很多人在「项目属性 → 调试 → 环境变量」里填东西,结果运行时根本没生效——那是旧版 .NET Framework 项目的路径,对 SDK 风格项目无效。正确位置是 launchSettings.json 的每个 profile 下:
{
"profiles": {
"MyTestProfile": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"MY_CUSTOM_FLAG": "true"
},
"commandLineArgs": "--verbose --config custom.json"
}
}
}
-
environmentVariables中的键名区分大小写,Windows 上通常忽略,但容器或 Linux 部署时会出问题 -
commandLineArgs不会自动加引号,含空格的路径必须手动包裹双引号,例如"--path "C:\my app\config.json"" - 修改后无需重启 VS,保存即刻生效;但正在调试的会话需手动停止再启动
C++ 项目没有 launchSettings.json 怎么办
C++ 项目(尤其是非 CMake 类型)默认不生成 launchSettings.json,它的启动配置分散在多个地方:
- 「项目属性 → 调试」页中设置
命令(Command)、命令参数(Command Arguments)、工作目录(Working Directory)和环境(Environment) - 这些设置实际写入
.vcxproj.user文件,属于用户本地配置,不会提交到源码库 - 若需共享启动配置(如团队统一用某调试器附加到进程),建议改用 CMake 项目 +
launch.vs.json,它支持跨平台 profile 定义 - 注意:C++ 的「仅生成启动项目和依赖项」选项(在「工具 → 选项 → 项目和解决方案 → 生成并运行」里)会影响 F5 行为,但和启动项本身无关
最常被忽略的是:launchSettings.json 里的配置只在「本机调试」时生效,发布到 IIS、Azure 或容器后全部失效;环境变量要靠部署平台另行注入,别指望它能替代 appsettings.Production.json 或 Docker ENV 指令。










