Angular 6+ASP.NET Core项目中VS内置CMD样式异常求助
解决Visual Studio启动Angular项目时CMD窗口样式异常的问题
我之前在开发ASP.NET Core + Angular项目时也碰到过一模一样的情况——VS弹出的CMD窗口没法正常显示行重写、进度条,连调试输出都看不全,折腾了好几个方法,终于找到几个可行的解决方案:
方案1:修改launchSettings.json,指定用系统CMD启动ng serve
这是最直接的方法,通过调整项目的启动配置,让VS调用系统自带的CMD来运行Angular的服务:
- 打开项目根目录下的
Properties/launchSettings.json文件 - 找到对应Angular的启动配置项(通常名字里带有"Angular")
- 修改配置内容,把
commandName改成"Executable",然后添加executablePath和arguments:
"MyProjectName": { "commandName": "Executable", "executablePath": "cmd.exe", "arguments": "/k cd ClientApp && ng serve --port 4200", "launchBrowser": true, "launchUrl": "http://localhost:4200" }
- 保存后重新F5运行,VS会弹出正常的CMD窗口,Angular的输出、进度条都能正常显示了。
方案2:手动分离前后端启动
这个方法更简单,不用改任何配置:
- 先自己打开一个正常的CMD窗口,切换到Angular项目目录(一般是
ClientApp),运行ng serve - 回到Visual Studio,把启动项目切换为ASP.NET Core后端项目,直接F5启动后端服务
- 这样前端的调试输出会在你手动打开的CMD里正常显示,后端的输出在VS的输出窗口,互不干扰,适合日常调试场景。
方案3:通过MSBuild脚本自动启动正常CMD
如果你想保持VS一键启动的体验,又要正常的CMD窗口,可以修改项目的.csproj文件,添加自定义MSBuild目标:
- 打开项目的
.csproj文件 - 在
<Project>标签内添加以下内容:
<Target Name="LaunchAngularInCmd" BeforeTargets="Build"> <!-- 检查是否已经有ng serve在运行,避免重复启动 --> <Exec Command="tasklist /fi "imagename eq node.exe" /fi "windowtitle eq ng serve" | find /i "node.exe"" IgnoreExitCode="true" > <Output TaskParameter="ExitCode" PropertyName="NgServeRunning" /> </Exec> <Exec Command="start cmd.exe /k "cd $(ProjectDir)ClientApp && ng serve"" Condition="'$(NgServeRunning)' != '0'" /> </Target>
- 然后修改
launchSettings.json,把原来启动Angular的配置改成只启动后端:
"MyProjectName": { "commandName": "Project", "launchBrowser": true, "launchUrl": "http://localhost:4200" }
- 保存后F5启动,VS会自动帮你打开正常的CMD窗口运行ng serve,同时启动后端服务。
方案4:调整VS调试设置
有时候VS的默认调试配置会导致控制台输出异常,可以试试调整这些设置:
- 打开VS的「工具」→「选项」→「调试」→「常规」
- 取消勾选「使用托管兼容模式」
- 再找到「工具」→「选项」→「项目和解决方案」→「Web项目」,取消勾选「使用浏览器链接」
- 重启VS后再运行项目,看看CMD窗口是否恢复正常。
这些方案都不局限于Angular项目,只要是VS启动外部控制台程序出现类似问题,都可以尝试。
内容的提问来源于stack exchange,提问作者Lubos Zapotocny
相关产品推荐
相关产品推荐

