The Module "aspnetcorev2.dll" failed to load
The Module "aspnetcorev2.dll" failed to load
最近我尝试在一台运行Windows Server 2008 R2 SP1的机器上安装ASP.NET Core/.NET Core: Runtime & Hosting Bundle版本2.2。然而,在安装后,IIS停止工作,并对其中托管的所有应用程序显示"503 Service unavailable"错误。在检查应用程序池时,我发现应用程序池会突然关闭。
在事件查看器中,我可以看到以下错误信息 -
模块DLL C:\Program Files (x86)\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll加载失败。数据是错误的。
我尝试将应用程序池设置为32位和64位,但错误仍然相同。有其他人遇到过这个问题或者有解决方案吗?
aspnetcorev2.dll加载失败的原因可能是ANCM模块没有正确的设置和配置,如果ASP.NET Core 2.0/2.1/2.2要在IIS上运行并使用IIS作为主要代理,然后再转到ASP.NET Core原始Kestrel引擎,这也被称为进程外模型。
在其他平台上,除了Windows之外,所有请求直接发送到Kestrel并由Kestrel直接提供。因此,在IIS上,需要进行一些特殊的配置设置才能在IIS上使用Kestrel。
关于IIS上的ANCM的更多信息,请参考官方的Microsoft Docs:
https://learn.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文件位于生成的编译文件夹内,而不是外部。还要确保您使用的是.NET Core 2.0/2.1/2.2的RTM或官方发布版本,而不是每日构建版本,因为使用每日构建的.NET Core 2.0/2.1/2.2可能会导致一些奇怪的错误,因为它们的完整运行时DLL分发可能不完全一致。
有关在ASP.NET Core 2.x中对ANCM进行故障排除的更多信息,请参考官方的MS Docs:
https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/troubleshoot?view=aspnetcore-2.2
根据下面的评论,我补充了以下额外信息:
您应该清除计算机上的所有nuget缓存,然后恢复和运行MSBUILD。如果您将.NET Core 2.2安装为ASP.NET Core 2.1应用程序的平台,那么如果您不更新应用程序的引用到v2.2,可能会导致引用混乱。
或者为了更好的实践,使用global.json文件来限制您的应用程序的编译始终使用.NET Core 2.1 SDK与特定版本,无论您的计算机上最新的.NET Core SDK是什么版本。
这也很重要,因为默认情况下,编译.NET Core应用程序将始终尝试使用计算机上最新的SDK,而之前存在的较旧版本将被忽略。
设置global.json的方法在这里记录:
https://learn.microsoft.com/en-us/dotnet/core/tools/global-json
在这台机器上,我安装了2.1版本,它工作得非常好。但是安装2.2会出现错误。我认为问题在于IIS,因为错误发生在应用程序加载之前,所有的应用程序(包括较旧的MVC和WebForms)都受到影响。卸载2.2版本后,IIS重新开始工作。
然后,您应该清除计算机上的所有nuget缓存,然后恢复和运行MSBUILD。如果您将.NET Core 2.2安装为ASP.NET Core 2.1应用程序的平台,那么如果您不更新应用程序的引用到v2.2,可能会导致引用混乱。
我的应用程序目标是net471。但是正如我所说,安装2.2会导致IIS完全停止工作。即使是简单的静态文件主机也停止工作。
如果您的应用程序目标是net471,为什么要使用.NET Core 2.1?ASP.NET Core 2.1与.NET4.7.1不兼容。而且您的问题中没有提到使用.NET 4.7.1的任何信息,您的标签是net-core。您最后的评论与您自己的问题相矛盾。
我正在使用.NET Core托管包,这是在IIS中托管dotnetcoremvc应用程序所需的
dotnetcoremvc应用程序需要ASP.NET Core 2.1,并且ASP.NET Core 2.1需要.NET Core 2.1,而不是.NET Framework。您在哪里找到说dotnetcore mvc应用程序与.NET Framework兼容的文档?谁说的这个?您确定您有正确的应用程序目标吗?否则,我无法再帮助您了。
当您从Visual Studio中创建新的ASP.NET Core Web应用程序时,有一个选项可以将目标框架选择为.NET Framework。此外,使用dotnet-cli创建dotnet核心应用程序后,您可以通过编辑csproj文件简单地更改框架。