最近我尝试安装ASP.NET核心/ .NET核心:运行和托管捆绑版本2.2在运行Windows Server 2008 R2 SP1的计算机上。然而,在安装IIS后停止工作,并给出了它承载的所有应用程序503 Service unavailable
错误。检查应用程序池后,我看到水池只是关闭。
在事件查看器,我可以看到下面的错误消息 -
模块DLL C:\程序文件(x86)\ IIS \ Asp.Net核心模块\ V2 \ aspnetcorev2.dll未能加载。数据是错误的。
我曾尝试池设置为两个32/64位,但错误是一样的。别的任何人面对这个问题,或者有这个解决方案?
通过下列文件看完后 -
Troubleshoot ASP.NET Core on IIS
和
Common errors reference for Azure App Service and IIS with ASP.NET Core
我才知道,ASP.NET核心/ .NET核心:运行和托管捆绑(最新版本)依赖于微软的Visual C ++ 2015年可再发行。有问题的机器已经安装的Redist ++早期版本的VC。安装可再发行的所说的版本后(32和64位),一切都开始工作了。
有趣的是ASP.NET的核心/ .NET核心:运行和托管捆绑2.2版安装程序在安装有关缺少VC ++ 2015年REDIST期间没有抛出任何错误或警告。
这aspnetcorev2.dll实际上是ASP.NET 2.0的核心模块,通常称为ANCM。该模块需要进行一些设置,如果ASP.NET核2.0 / 2.1 / 2.2将被IIS上运行,才去ASP.NET核心原隼引擎使用IIS作为主要的代理配置,并且它也叫出来-of过程模型。
这一点很重要,Windows以外的其他平台上,所有的请求,直接转到红隼和红隼直接服务。因此在IIS上,一个特殊的配置设置需要进行使用红隼在IIS上。
有关在IIS ANCM的更多信息,请参阅此微软官方文档:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.2
注:虽然该页面是.NET 2.2的核心,它仍然适用于.NET 2.0 / 2.1。
根据你的错误,有一个机会,ANCM DLL是不是导致您的应用程序的DLL的范围之内。确保ANCM DLL文件的编译后的文件夹中,而不是外界。此外,还要确保您使用的是RTM或.NET核2.0 / 2.1 / 2.2运行时,而不是每日构建的官方发布版本,因为使用.NET核心的每日构建2.0 / 2.1 / 2.2可能会带来一些奇怪的错误,因为他们的全分布运行时的DLL可能不完全一致。
有关在ASP.NET核心2.x的故障排除ANCM的更多信息,请参阅本官方MS文档:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/troubleshoot?view=aspnetcore-2.2
更新#1:
基于下面的评论,我添加此额外的信息:你应该清楚你的机器上所有的NuGet高速缓存,恢复并再次运行MSBUILD。如果你使用.NET 2.1核心的平台,为您的ASP.NET 2.1的核心应用程序,然后如果你安装.NET 2.2的核心,而无需更新到V2.2您的应用程序的引用,有一个机会,引用仍然混在一起。
还是为了更好的做法,使用global.json
文件严格的您的应用程序的编译总是使用.NET 2.1的核心SDK与特定的版本,无论是什么.NET核心SDK的最新版本,你有你的机器上。这也是很重要的,因为在默认情况下编译.NET核心应用将始终尝试使用最新的SDK你的机器上,和以前的现有旧版本将被忽略。
设置global.json
记录在这里:https://docs.microsoft.com/en-us/dotnet/core/tools/global-json