最近,我尝试在运行 Windows Server 2008 R2 SP1 的计算机上安装 ASP.NET Core / .NET Core:Runtime&Hosting Bundle版本2.2 。但是,安装IIS后,IIS将停止工作,并为其中托管的所有应用程序显示503 Service unavailable
错误。在检查了应用程序池后,我看到池刚刚关闭。
在事件查看器中,我可以看到以下错误消息-
模块DLL C:\ Program Files(x86)\ IIS \ Asp.Net Core Module \ V2 \ aspnetcorev2.dll加载失败。数据就是错误。
我尝试将池设置为32/64位,但是错误是相同的。还有其他人面对这个问题或对此有解决方案吗?
答案 0 :(得分:4)
阅读以下文档后-
Troubleshoot ASP.NET Core on IIS
和
Common errors reference for Azure App Service and IIS with ASP.NET Core
我知道 ASP.NET Core / .NET Core:运行时和托管包(最新版本)取决于 Microsoft Visual C ++ 2015 Redistributable 。有问题的计算机已安装 vc ++ redist 的早期版本。安装了上述版本的可再发行组件(32位和64位)后,所有内容又重新开始工作。
有趣的是, ASP.NET Core / .NET Core:运行时和主机捆绑包版本2.2 安装程序在安装过程中没有抛出有关缺少的 vc ++ 2015 redist <的任何错误或警告< / strong>。
答案 1 :(得分:1)
我在新安装的Windows 7上遇到了相同的错误,我对其进行了查找并发现它确实是缺少的更新。 要修复它,您只需要从https://www.microsoft.com/en-us/download/details.aspx?id=49077下载并安装KB2999226(即,这适用于Windows 7) &问题已直接解决。您无需去下载/安装整个Microsoft Visual C ++可再发行组件包。几分钟后也没有重新启动。您不需要安装2015或2017软件包,只需2013、2010、2008和2005。
答案 2 :(得分:0)
该aspnetcorev2.dll实际上是ASP.NET Core 2.0模块,通常称为ANCM。如果要在IIS之上运行ASP.NET Core 2.0 / 2.1 / 2.2并使用IIS作为主要代理,然后再转到ASP.NET Core原始Kestrel引擎,则需要进行一些设置和配置。过程模型。
这很重要,在Windows以外的其他平台上,所有请求都直接发送到Kestrel,并由Kestrel直接提供服务。因此,在IIS上,需要进行特殊的配置设置才能在IIS上使用Kestrel。
有关IIS上ANCM的更多信息,请查阅以下官方Microsoft文档: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.2
注意::尽管该页面适用于.NET Core 2.2,但仍适用于.NET 2.0 / 2.1。
根据您的错误,ANCM DLL可能不在您的应用程序生成的DLL的影响范围之内。确保ANCM dll文件在生成的编译文件夹中,而不在外部。还要确保您使用的是RTM或.NET Core 2.0 / 2.1 / 2.2运行时的正式发行版,而不是每日构建,因为使用.NET Core 2.0 / 2.1 / 2.2的每日构建可能会带来一些奇怪的错误,因为它们的完整分发运行时DLL可能不完全一致。
有关在ASP.NET Core 2.x中对ANCM进行故障排除的更多信息,请查阅以下官方MS Docs: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/troubleshoot?view=aspnetcore-2.2
更新#1:
根据下面的评论,我添加以下附加信息: 您应该清除计算机上的所有nuget缓存,还原并再次运行MSBUILD。如果您将.NET Core 2.1用作ASP.NET Core 2.1应用程序的平台,则如果安装.NET Core 2.2而不将应用程序的引用更新为v2.2,则可能还会混淆引用。
或者为了更好的实践,请使用global.json
文件来严格编译应用程序,以始终使用具有特定版本的.NET Core 2.1 SDK,无论您的计算机上最新的.NET Core SDK版本是什么。
这也很重要,因为默认情况下, 编译.NET Core应用程序将始终尝试使用计算机上可用的最新SDK,并且将忽略以前的现有旧版本。
此处记录了global.json
的设置:
https://docs.microsoft.com/en-us/dotnet/core/tools/global-json
答案 3 :(得分:0)
我注意到 C:\Program Files\IIS\Asp.Net Core Module
在我的机器上确实不存在。我刚刚复制了确实存在的 C:\Program Files\IIS Express\Asp.Net Core Module
(elevated) 并且......应用程序池开始正常!