asp.net core发布到iis后出现An error occurred while starting the application

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net core发布到iis后出现An error occurred while starting the application相关的知识,希望对你有一定的参考价值。

参考技术A

asp.net core发布到iis后出现错误,An error occurred while starting the application,站点启动不了,这个提示很难发现问题的所在。

错误原文如下:

An error occurred while starting the application.

NET Core 4.6.26328.01 X64 v4.0.0.0 | Microsoft.AspNetCore.Hosting version 2.2.7-rtm-10026 | Microsoft Windows 10.0.16299 | Need help?

解决问题的第一步肯定是先找到错误原因,

需要把stdoutLogEnabled值false设置为 true

如果没有发现该节点就复制一份过去, 记得把 XX.Web.dll 改成自己的名字。

完成的config文件

修改了再次启动网站,就会找到错误,定位到错误了改起来就简单了!!

结束!!

ASP.NET Core部署系列一:发布到IIS上

前言

  当构建一个ASP.NET Core应用程序并且计划将其运行在IIS中时,你会发现Core应用程序和之前版本的ASP.NET程序在IIS中的运行方式是完全不一样的。与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kestrel不同端口的ASP.NET Core程序中,随后就将接收到的请求推送至中间件管道中去,处理完你的请求和相关业务逻辑之后再将HTTP响应数据重新回写到IIS中,最终转达到不同的客户端(浏览器,APP,客户端等)。而配置文件和过程都会由些许调整,中间最重要的角色便是AspNetCoreModule,它是其中一个的IIS模块,请求进入到IIS之后便立即由它转发,并迅速重定向到ASP.NET Core项目中,所以这时候我们无需设置应用程序池来托管我们的代码,它只负责转发请求而已。

回顾之前的ASP.NET的经典托管

技术图片

   在经典ASP.NET应用程序中,所有一切都托管在IIS工作进程中(w3wp.exe),这也被称为IIS应用程序池。ASP.NET程序被托管在应用程序池中,并且被按照IIS内建的ASP.NET托管特性所实例化。当请求从http.sys传入到ASP.NET应用程序管道时,本地运行时管理器会实例化一个代表应用程序的.NET运行时,同时引入HttpRuntime对象用来处理这个请求。来自http.sys的请求被派送到对应的应用程序池和HttpRuntime实例的托管站点。

ASP.NET CORE与IIS

技术图片

  ASP.NET Core则完全不同,它并不是运行在IIS的工作进程中,而是独立运行的。它运行于控制台应用程序之中,控制台中则运行了Kestrel Web服务器组件。Kestrel作为一款.NET Web服务器的实现,它在吞吐量性能方面做了很多工作。它可以快速将来自网络的请求接入到应用程序中,但是它仅仅是一个最基本的Web服务器。它没有类似IIS的Web管理服务,也没有IIS那么多的功能。

  ASP.NET Core程序独立运行在控制台应用程序中,并通过dotnet运行时命令调用。它并没有被加载到IIS工作进程中,但是IIS却加载了名为AspNetCoreModule的本地Module,这个Module用于执行外部的控制台程序。AspNetCoreModule是作为ASP.NET Core Server Hosting Bundle的一部分被安装在服务器上的。

  部署之前要确保你的IIS上已经安装了AspNetCoreModule托管模块,如果没有的话,点击这里进行下载并安装

技术图片

开始

一、安装IIS

  在控制面板→程序→启用或关闭Windows功能→勾选Internet Information Services以及Web管理工具下的IIS管理控制台

技术图片

二、发布项目

  发布我们建好的ASP.NET Core项目,然后选择IIS,新建一项发布配置

技术图片

技术图片

 

 技术图片

三、在IIS上绑定添加网站

  添加一个网站,设置一下名称,并将路径指向你刚才发布的文件夹,然后启动网站即可

技术图片

  设置应用程序池的.NET CLR版本为“无托管代码”,因为刚才也说了,IIS是作为一个反向代理的角色,并不需要它来托管代码

技术图片

技术图片

四、浏览网站

  这个时候出现了这个问题

技术图片

错误分析
IIS服务器上的.net core 运行时不是最新的,导致AspNetCoreModuleV2模块缺失或者报错

检查发现 项目的版本是 .netcore2.2 ,而运行时安装的为 .netcore runtime 2.1.6

查看程序 如果没有安装.netcore2.2 就需要安装

技术图片

技术图片

下载完成后安装

就可以打开网站了

技术图片

总结

 至此,整个IIS的搭建已经完成,作为个人的笔记记录备忘,同时也共享出来,不知道你是否有所收获。接下来会遇到什么样坑。不管怎样,你的每一步,回过头来看,都是值得的

 

以上是关于asp.net core发布到iis后出现An error occurred while starting the application的主要内容,如果未能解决你的问题,请参考以下文章

IIS 10 上的 ASP.NET Core 404 错误

ASP.NET Core部署系列一:发布到IIS上

Asp.Net Core App 部署故障示例

在 IIS 中托管 ASP Net Core 应用程序时无限页面加载

asp.net 2.0 网站 IIS/应用程序池 出现以下问题,望高手解决

将 ASP NET Core 部署到 IIS