C# 角度应用程序不在dotnet core/IIS下启动

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秒,因为它不是关于超时的

我在Visual Studio Professional 2017 Aspnet Core下有一个angular 8应用程序。如果我通过angular cli使用
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应用程序的构建
  • 您可以更好地控制要重新启动应用程序的哪个部分

接着@Terenzio Berni的答案

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?实际上,这只是有时才起作用,所以它不是一个解决方案。它的工作非常有魅力。经过几天的努力,我终于明白了为什么我的项目会断断续续地挂起,并且在调试无效时要花很长时间才能加载,这是一个受欢迎的解决方法。谢谢