C# 角度应用程序不在dotnet core/IIS下启动
我在Visual Studio Professional 2017 Aspnet Core下有一个angular 8应用程序。如果我通过angular cli使用C# 角度应用程序不在dotnet core/IIS下启动,c#,angular,asp.net-core,C#,Angular,Asp.net Core,我在Visual Studio Professional 2017 Aspnet Core下有一个angular 8应用程序。如果我通过angular cli使用ng serve(或npm start)运行应用程序,它工作正常,我可以访问该应用程序。但是,如果我尝试在VisualStudio上用IIS调试它,它永远不会启动。我得到的唯一错误是{“error”:“Angular CLI进程没有在XXX秒的超时时间内开始侦听请求。请检查日志输出以获取错误信息。” 我写了XXX秒,因为它不是关于超时的
ng serve
(或npm start
)运行应用程序,它工作正常,我可以访问该应用程序。但是,如果我尝试在VisualStudio上用IIS调试它,它永远不会启动。我得到的唯一错误是{“error”:“Angular CLI进程没有在XXX秒的超时时间内开始侦听请求。请检查日志输出以获取错误信息。”
我写了XXX秒,因为它不是关于超时的,无论我设置了什么超时,应用程序都不会启动。
我将angular core软件包更新为最新版本,将Visual Studio 2017更新为最新版本,删除了dist文件夹,删除了节点模块,基本上尝试了我在互联网上看到的一切
我的核心版本是:2.2.101
我以管理员的身份运行VisualStudio
同样的代码在我同事的电脑上运行得非常好
这是我的Startup.cs
app.UseSpa(spa =>
{
// To learn more about options for serving an Angular SPA from ASP.NET Core,
// see https://go.microsoft.com/fwlink/?linkid=864501
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.Options.StartupTimeout = new TimeSpan(0, 0, 200);
spa.UseAngularCliServer(npmScript: "start");
}
});
这是我的package.json
{
"name": "ABCXYZ..",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"build:ssr": "ng run Abcxyz:server:dev",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"debug": "ng serve --watch"
},
"private": true,
"dependencies": {
"@angular/animations": "8.2.14",
"@angular/common": "8.2.14",
"@angular/compiler": "8.2.14",
"@angular/core": "8.2.14",
"@angular/forms": "8.2.14",
"@angular/http": "7.2.15",
"@angular/platform-browser": "8.2.14",
"@angular/platform-browser-dynamic": "8.2.14",
"@angular/platform-server": "8.2.14",
"@angular/router": "8.2.14",
"@ng-bootstrap/ng-bootstrap": "^5.1.4",
"@nguniversal/module-map-ngfactory-loader": "8.2.6",
"adal-angular": "^1.0.17",
"adal-angular4": "^4.0.9",
"aspnet-prerendering": "^3.0.1",
"bootstrap": "^4.1.3",
"core-js": "^2.5.7",
"font-awesome": "^4.7.0",
"jquery": "3.4.1",
"ngx-toastr": "^11.2.1",
"popper.js": "^1.14.3",
"primeng": "^9.0.0-rc.1",
"rxjs": "^6.0.0",
"tslib": "^1.9.0",
"zone.js": "^0.10.2"
},
"devDependencies": {
"@angular-devkit/build-angular": "^0.803.21",
"@angular/cli": "~8.3.21",
"@angular/compiler-cli": "^8.2.14",
"@angular/language-service": "^8.2.14",
"@types/jasmine": "~3.5.0",
"@types/jasminewd2": "~2.0.8",
"@types/node": "~13.1.1",
"codelyzer": "~5.2.1",
"jasmine-core": "~3.5.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "^4.4.1",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~2.1.1",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.5.1",
"typescript": "3.5.3"
},
"optionalDependencies": {
"node-sass": "^4.9.3",
"protractor": "~5.4.0",
"ts-node": "~5.0.1",
"tslint": "~5.9.1"
}
}
这是我的网络信息
Runtime Environment:
OS Name: Windows
OS Version: 10.0.17763
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\2.2.101\
Host (useful for support):
Version: 2.2.0
Commit: 1249f08fed
.NET Core SDKs installed:
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.403 [C:\Program Files\dotnet\sdk]
2.1.502 [C:\Program Files\dotnet\sdk]
2.1.509 [C:\Program Files\dotnet\sdk]
2.2.101 [C:\Program Files\dotnet\sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
同样,如果我直接从angular cli运行相同的代码,它可以正常工作
任何帮助或指向正确的方向都是非常感谢的。
谢谢大家! 该问题看起来像Visual studio在调试模式下如何处理angular server启动的一个bug:
app.UseSpa(spa =>
{
// To learn more about options for serving an Angular SPA from ASP.NET Core,
// see https://go.microsoft.com/fwlink/?linkid=864501
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
在开发模式下,启动程序尝试在随机端口上自行启动ng服务器。
然后出现问题,重定向到ng服务器不起作用
到目前为止,我找到的最佳解决方案是:
- 在终端的端口4200上自己启动ng服务器
- 更改上面的代码
app.UseSpa(spa =>
{
// To learn more about options for serving an Angular SPA from ASP.NET Core,
// see https://go.microsoft.com/fwlink/?linkid=864501
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseProxyToSpaDevelopmentServer("http://localhost:4200");
}
});
此解决方案在100%的情况下有效。
主要缺点是您松开了调试启动的1按钮
优点是:
- 它可以工作,你可以调试你的应用程序没有问题了
- 您可以在文本颜色的终端中跟踪ng服务器正在做什么,当您在angular应用程序中更改某些内容时,该终端可以为您提供更好的信息和建议
- VisualStudio中的JavaScript调试器仍然可以正常工作。如果您喜欢在浏览器中调试,您仍然可以这样做,这样您就不会以您喜欢的方式在调试js代码时丢失任何东西
- C#应用程序和IIS服务器的启动速度更快,因为您不必等待angular应用程序的构建
- 您可以更好地控制要重新启动应用程序的哪个部分
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
string strCmdText = @"/K cd ""{Location Of Angular App}"" & npm start";
System.Diagnostics.Process.Start("CMD.exe", strCmdText);
Thread.Sleep(7000);
spa.UseProxyToSpaDevelopmentServer("http://localhost:4200");
}
});
应该有助于避免手动启动角度项目。调整sleep参数,使angular有足够的时间起床并运行。这确实会使调试输出有点模糊,因此启动第二个命令提示符可能是一个更好的主意。尝试将visual studio作为administrator@MikNiller你好,Mik,谢谢,我忘了提一下,它是以管理员的身份运行的。好吧,有没有可能它正在监听操作系统或其他应用程序占用的端口?@MikNiller谢谢,这可能是问题所在,但我现在检查了一下,没有其他应用程序侦听该端口。您的同事使用的是什么版本的.net core和typescript?实际上,这只是有时才起作用,所以它不是一个解决方案。它的工作非常有魅力。经过几天的努力,我终于明白了为什么我的项目会断断续续地挂起,并且在调试无效时要花很长时间才能加载,这是一个受欢迎的解决方法。谢谢