在IIS上使用Asp.Net Core 2.1.1发布Angular 6应用

时间:2018-08-01 14:25:21

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

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

  

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

  AggregateException:发生一个或多个错误。 (发生一个或多个错误。(退出NPM脚本“开始”时未指示Angular CLI正在侦听请求。错误输出为:npm ERR!路径C:\ Sites \ NewPro \ Microsum.NewPro.ERP \ ERPApp \ package.json

  

  npm ERR!代码ENOENT

  npm ERR! errno -4058

  npm ERR! syscall打开

  npm ERR! enoent ENOENT:没有这样的文件或目录,打开'C:\ Sites \ NewPro \ Microsum.NewPro.ERP \ ERPApp \ package.json'

  

  npm ERR! enoent这与npm无法找到文件有关。

  npm ERR! enoent

  

  

  npm ERR!可以在以下位置找到此运行的完整日志:

  

  npm ERR! 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 ERR!代码ENOENT

  npm ERR! errno -4058

  npm ERR! syscall打开

  npm ERR! enoent ENOENT:没有这样的文件或目录,打开'C:\ Sites \ NewPro \ Microsum.NewPro.ERP \ ERPApp \ package.json'

  

  npm ERR! enoent这与npm无法找到文件有关。

  npm ERR! enoent

  

  

  npm ERR!可以在以下位置找到此运行的完整日志:

  

  npm ERR! 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!路径C:\ Sites \ NewPro \ Microsum.NewPro.ERP \ ERPApp \ package.json

   npm ERR!代码ENOENT npm ERR! errno -4058 npm错误! syscall打开npm ERR! enoent ENOENT:没有这样的文件或目录,打开'C:\ Sites \ NewPro \ Microsum.NewPro.ERP \ ERPApp \ package.json'

   npm ERR! enoent这与npm无法找到文件有关。 npm ERR! enoent

   npm ERR!此运行的完整日志可以在以下位置找到:

   npm ERR! 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,Task 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 ERR!代码ENOENT npm ERR! errno -4058 npm错误! syscall打开npm ERR! enoent ENOENT:没有这样的文件或目录,打开'C:\ Sites \ NewPro \ Microsum.NewPro.ERP \ ERPApp \ package.json'

   npm ERR! enoent这与npm无法找到文件有关。 npm ERR! enoent

   npm ERR!此运行的完整日志可以在以下位置找到:

   npm ERR! 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 ERR!代码ENOENT

  npm ERR! errno -4058

  npm ERR! syscall打开

  npm ERR! enoent ENOENT:没有这样的文件或目录,打开'C:\ Sites \ NewPro \ Microsum.NewPro.ERP \ ERPApp \ package.json'

  

  npm ERR! enoent这与npm无法找到文件有关。

  npm ERR! enoent

  

  

  npm ERR!可以在以下位置找到此运行的完整日志:

  

  npm ERR! 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(String sourcePath,String npmScriptName,ILogger logger)

     ---内部异常堆栈跟踪的结尾---

     在Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.StartAngularCliServerAsync(String sourcePath,String npmScriptName,ILogger logger)

生成的日志如下:

  

如果以“ ok”结尾的信息,则可以正常工作

  详细cli ['D:\ Programas \ nodejs \ node.exe',

  详细cli'D:\ Programas \ nodejs \ node_modules \ npm \ bin \ npm-cli.js',

  详细cli'run',

  详细cli'start',

  详细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”“运行”“开始”“-”“-端口”“ 52476“

  详细节点v8.11.3

  详细的npm v5.6.0

  错误路径C:\ Sites \ NewPro \ Microsum.NewPro.ERP \ ERPApp \ package.json

  错误代码ENOENT

  错误errno -4058

  错误的系统调用打开

  错误ENTEN ENOENT:没有这样的文件或目录,打开'C:\ Sites \ NewPro \ Microsum.NewPro.ERP \ ERPApp \ package.json'

  error enoent这与npm无法找到文件有关。

  详细出口[-4058,是]

任何建议都非常欢迎。

3 个答案:

答案 0 :(得分:1)

迟来的响应,但如果有人仍在使用更高版本的.NET Core / Angular SPA遇到类似问题;

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

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

或者,您可以只添加

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

<aspNetCore元素内已发布的web.config文件中,该元素默认为自动关闭。缺点是,每次发布应用程序时都需要重新添加它,直到创建发布配置文件为止。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我能够通过忽略Visual Studio的标准视觉模板并创建AspNet Web应用程序项目,然后再创建角度应用程序来解决问题。

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

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