【问题标题】:Publishing an Angular 6 app with Asp.Net Core 2.1.1 on IIS在 IIS 上使用 Asp.Net Core 2.1.1 发布 Angular 6 应用程序
【发布时间】:2019-01-09 04:12:00
【问题描述】:

使用 Visual Studio 2017 (15.7.5) 应用程序运行正常。但是,发布到 IIS 7.5 时,当我尝试访问浏览器时出现以下错误

处理请求时发生未处理的异常。

AggregateException:发生一个或多个错误。 (发生了一个或多个错误。(NPM 脚本“启动”退出,但未指示 Angular CLI 正在侦听请求。错误输出为:npm ERR!path C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\包.json

npm 错误!代码ENOENT npm 错误!错误号 -4058 npm 错误!系统调用打开 npm 错误! enoent ENOENT:没有这样的文件或目录,打开 'C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\package.json' npm 错误! enoent 这与 npm 找不到文件有关。 npm 错误!恩恩 npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! C:\Windows\system32\config\systemprofile\AppData\Roaming\npm-cache_logs\2018-08-01T14_50_15_092Z-debug.log )) System.Threading.Tasks.Task.GetResultCore(bool waitCompletionNotification) InvalidOperationException:NPM 脚本“启动”退出,但未指示 Angular CLI 正在侦听请求。错误输出是:npm ERR!路径 C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\package.json npm 错误!代码ENOENT npm 错误!错误号 -4058 npm 错误!系统调用打开 npm 错误! enoent ENOENT:没有这样的文件或目录,打开 'C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\package.json' npm 错误! enoent 这与 npm 找不到文件有关。 npm 错误!恩恩 npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! C:\Windows\system32\config\systemprofile\AppData\Roaming\npm-cache_logs\2018-08-01T14_50_15_092Z-debug.log Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.StartAngularCliServerAsync(字符串 sourcePath,字符串 npmScriptName,ILogger 记录器) 堆栈查询 Cookie 标头 AggregateException:发生一个或多个错误。 (发生了一个或多个错误。(NPM 脚本“启动”退出,但未指示 Angular CLI 正在侦听请求。错误输出为:npm ERR!path C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\包.json npm 错误!代码 ENOENT npm 错误! errno -4058 npm 错误!系统调用打开 npm 错误! enoent ENOENT:没有这样的文件或目录,打开 'C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\package.json' npm 错误! enoent 这与 npm 找不到文件有关。 npm 错误!恩恩 npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! C:\Windows\system32\config\systemprofile\AppData\Roaming\npm-cache_logs\2018-08-01T14_50_15_092Z-debug.log )) System.Threading.Tasks.Task.GetResultCore(bool waitCompletionNotification) Microsoft.AspNetCore.SpaServices.Extensions.Util.TaskTimeoutExtensions.WithTimeout(任务任务,TimeSpan timeoutDelay,字符串消息) Microsoft.AspNetCore.SpaServices.Extensions.Proxy.SpaProxy.PerformProxyRequest(HttpContext 上下文,HttpClient httpClient,任务 baseUriTask,CancellationToken applicationStoppingToken,bool proxy404s) Microsoft.AspNetCore.Builder.SpaProxyingExtensions+c__DisplayClass2_0+d.MoveNext() Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext) Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext 上下文) Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文) 显示原始异常详细信息 InvalidOperationException:NPM 脚本“启动”退出,但未指示 Angular CLI 正在侦听请求。错误输出是:npm ERR!路径 C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\package.json npm 错误!代码 ENOENT npm 错误! errno -4058 npm 错误!系统调用打开 npm 错误! enoent ENOENT:没有这样的文件或目录,打开 'C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\package.json' npm 错误! enoent 这与 npm 找不到文件有关。 npm 错误!恩恩 npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! C:\Windows\system32\config\systemprofile\AppData\Roaming\npm-cache_logs\2018-08-01T14_50_15_092Z-debug.log Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.StartAngularCliServerAsync(字符串 sourcePath,字符串 npmScriptName,ILogger 记录器) 显示原始异常详细信息 System.InvalidOperationException:NPM 脚本“开始”退出,但未指示 Angular CLI 正在侦听请求。错误输出是:npm ERR!路径 C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\package.json npm 错误!代码ENOENT npm 错误!错误号 -4058 npm 错误!系统调用打开 npm 错误! enoent ENOENT:没有这样的文件或目录,打开 'C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\package.json' npm 错误! enoent 这与 npm 找不到文件有关。 npm 错误!恩恩 npm 错误!可以在以下位置找到此运行的完整日志: npm 错误! C:\Windows\system32\config\systemprofile\AppData\Roaming\npm-cache_logs\2018-08-01T14_50_15_092Z-debug.log ---> System.IO.EndOfStreamException:试图读取流的末尾。 在 Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.StartAngularCliServerAsync(字符串源路径,字符串 npmScriptName,ILogger 记录器) --- 内部异常堆栈跟踪结束 --- 在 Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.StartAngularCliServerAsync(字符串源路径,字符串 npmScriptName,ILogger 记录器)

生成的日志如下:

如果它以 ok 结尾,它会起作用

详细的 cli ['D:\Programas\nodejs\node.exe', 详细的 cli 'D:\Programas\nodejs\node_modules\npm\bin\npm-cli.js', 详细的 cli '运行', 详细的 cli '开始', 详细的 cli '--', 详细的 cli '--port', 详细的 cli '52476' ] 使用 npm@5.6.0 的信息 使用 node@v8.11.3 的信息 详细堆栈错误:ENOENT:没有这样的文件或目录,打开 'C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\package.json' 详细 cwd C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp 详细的 Windows_NT 6.1.7601 详细 argv "D:\Programas\nodejs\node.exe" "D:\Programas\nodejs\node_modules\npm\bin\npm-cli.js" "run" "start" "--" "--port" " 52476" 详细节点 v8.11.3 详细的 npm v5.6.0 错误路径 C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\package.json 错误代码 ENOENT 错误 errno -4058 错误系统调用打开 错误 enoent ENOENT:没有这样的文件或目录,打开 'C:\Sites\NewPro\Microsum.NewPro.ERP\ERPApp\package.json' error enoent 这与 npm 无法找到文件有关。 详细退出 [ -4058, true ]

非常欢迎任何建议。

【问题讨论】:

  • @Yannis,感谢您建议的格式。我是新来的。我试图突出显示错误消息的文本,但我不能。
  • 确保您的 IIS 网站映射到包含 wwwrootClientApp 目录以及 .NET Core 应用程序 dll 的已发布目录
  • @MohsinMehmood 当我在 Visual Studio 2017 中发布时,它会生成 .Net Core dll 集,并且在这些 dll 旁边,它还会生成一个带有角度应用程序的目录和另一个名为“wwwroot”的目录,它又包含从 Angular 编译的所有文件(.ico、.js、.html、.css 等)。我在 Visual Studio 创建的这个目录的根目录中注册我的 IIS 应用程序。这是我的错吗?
  • 您的问题解决了吗?您需要将 IIS 网站映射到包含 dll、wwwroot 和 ClientApp 文件夹的已发布文件夹
  • 这里相同,但我的情况是我试图运行从发布文件夹调用命令 Dotnet myapp.dll 的应用程序。此外,我检查了发布文件夹,确实没有 package.json 文件

标签: asp.net-core iis-7.5 angular6


【解决方案1】:

响应较晚,但如果有人在更高版本的 .NET Core/Angular SPA 中仍然遇到类似问题;

我使用 .NET Core 3.1 生成了空白模板,它是 Angular SPA 模板,它始终可以在开发模式下成功运行,但在发布时会失败,并出现与上述相同的错误。这对我来说总是很奇怪,因为如果您已经发布了应用程序,它甚至不应该 寻找 package.json - 它应该加载静态文件。

问题在于它正在构建的开发环境 - 默认情况下,我的 ASPNETCORE_ENVIRONMENT 变量设置为 Development 意味着 Startup.cs 逻辑将所有 if(env.IsDevelopment()) 检查读取为 true,即使在之后发布。最简单的解决方法是在 VS 项目中的 Properties > Publish Profiles 下创建一个新的发布配置文件。将其命名为 Production.pubxml 或其他名称,并向其中添加以下元素:<EnvironmentName>Production</EnvironmentName>。然后,当您从 Build > Publish 菜单发布时,从下拉列表中选择 File。这会将特定于该应用程序的环境变量添加到 web.config 文件中,从而允许 SpaServices 中间件实际完成其工作,而不是尝试启动节点服务器。

或者,您可以添加

<environmentVariables>
   <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
</environmentVariables>

到已经发布的 web.config 文件,在默认情况下自动关闭的 &lt;aspNetCore 元素内。这里的缺点是每次发布应用程序时都需要重新添加它,直到创建发布配置文件。

【讨论】:

  • 非常感谢您的回答。我希望它可以帮助有同样问题的人。微软正在努力改进这一点,但 .Net Core 与 SPA 框架(Angular、React、Vue 等)的集成仍然需要改进很多。 Shawn Wildermuth 写了一篇非常有趣的文章,其中包含一些集成技巧。文章就是这一篇:infoq.com/br/articles/spa-asp-dotnet-core-3/…
【解决方案2】:

我能够通过忽略 Visual Studio 的标准可视化模板并创建一个 AspNet Web 应用程序项目,然后创建 Angular 应用程序来解决。

我把the project code in github给有同样问题的人使用。

我为任何想要手动构建项目的人生成了a detailed step-by-step with prints

【讨论】:

    【解决方案3】:

    在 Visual Studio 的解决方案资源管理器中,选择文件夹 ClientApp 中的文件 package.json,然后更改属性 复制到输出目录始终复制

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      相关资源
      最近更新 更多