ASP.NET Web API+Angular项目中npm.cmd被记事本打开而非执行的问题
解决ASP.NET + Angular项目中
npm start触发记事本打开的问题 问题现象
- 使用
dotnet new angular --name something(.NET 6.0.401)创建内嵌Angular的ASP.NET Web API项目 - 执行
dotnet run后,localhost:5097显示临时跳转页面,控制台持续输出:info: Microsoft.AspNetCore.SpaProxy.SpaProxyMiddleware[0] SPA proxy is not ready. Returning temporary landing page. - 访问localhost:44415时,控制台报错:
fail: Microsoft.AspNetCore.SpaProxy.SpaProxyLaunchManager[0] Couldn't start the SPA development server with command 'npm start'. - 同时弹出记事本窗口,显示
npm.cmd的内容
解决方法
1. 修复.cmd文件的默认关联
Windows中.cmd文件被错误关联到记事本,导致系统打开.cmd时直接用记事本而不是执行它。可以通过以下命令修复:
- 以管理员身份打开命令提示符(CMD)
- 执行命令:
assoc .cmd=cmdfile ftype cmdfile="%SystemRoot%\System32\cmd.exe" /c "%1" %* - 执行后重启命令提示符和IDE,再尝试
dotnet run
2. 直接指定npm的完整路径
如果修复关联无效,可以修改项目中SPA代理的配置,直接指定npm的完整路径:
- 打开项目根目录下的
Properties/launchSettings.json - 找到
profiles下对应的配置项,修改spaProxyLaunchCommand为npm的完整路径,比如:"spaProxyLaunchCommand": "\"C:\\Program Files\\nodejs\\npm.cmd\" start" - 保存后重新执行
dotnet run
3. 手动启动Angular开发服务器
如果上述方法都无效,可以手动启动Angular服务,再启动ASP.NET项目:
- 打开命令提示符,进入项目的
ClientApp目录 - 执行
npm install确保依赖安装完成(首次运行需要) - 执行
npm start启动Angular开发服务器 - 另开一个命令提示符,在项目根目录执行
dotnet run,此时ASP.NET会直接代理到已启动的Angular服务
内容的提问来源于stack exchange,提问作者slowikowskiarkadiusz
相关产品推荐
相关产品推荐

