HTTP错误500.31 - 在IIS中,ANCM无法找到本机依赖项

57

我尝试运行一个Blazor应用程序。

Web.Server runs .NET Core 3.0
Web.Client runs .NET Standard 2.0
Web.Shared runs .NET Standard 2.0

将应用程序发布并上传到 IIS 后,我收到了这个错误:

HTTP Error 500.31 - ANCM Failed to Find Native Dependencies
Common solutions to this issue:
The specified version of Microsoft.NetCore.App or Microsoft.AspNetCore.App was not found.

事件查看器 包含以下错误信息:

HTTP Error 500.31 - ANCM Failed to Find Native Dependencies

当我运行dotnet --info时,我可以看到Microsoft.NetCore.AppMicrosoft.AspNetCore.App都包含版本3: PS C:\Users\FooBar> dotnet --info .NET Core SDK (反映任何global.json): 版本: 3.0.100-preview6-012264 提交: be3f0c1a03

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.17763
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.0.100-preview6-012264\

Host (useful for support):
  Version: 3.0.0-preview6-27804-01
  Commit:  fdf81c6faf

.NET Core SDKs installed:
  1.0.4 [C:\Program Files\dotnet\sdk]
  2.0.0 [C:\Program Files\dotnet\sdk]
  2.1.101 [C:\Program Files\dotnet\sdk]
  3.0.100-preview6-012264 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.0.0-preview6.19307.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 1.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.1.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.0.0-preview6-27804-01 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.0.0-preview6-27804-01 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

ASP.NET Core诊断:

IMPORTANT: This report might contain confidential information. Mask such before sharing to others.
-----
System Time: 6/18/2019 12:50:58 AM
Processor Architecture: AMD64
OS: Microsoft Windows NT 10.0.17763.0
Server Type: IIS

Scan 31 installed module(s).
ASP.NET Core module version 2 is installed for .NET Core 2.2 and above: C:\Program Files\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll (13.0.19158.0).

Scan 86 registered handler(s).
* Found a valid ASP.NET Core handler as { Name: aspNetCore, Path: *, State: Enabled, Module: AspNetCoreModuleV2, Entry Type: Local }.
  Visual C++ runtime is detected (expected: 14.0, detected: 14.14.26405.0 built by: VCTOOLSREL): C:\WINDOWS\system32\msvcp140.dll.
Scan aspNetCore section.
    "processPath": dotnet.
    "arguments": .\Web.Server.dll.
    "hostingModel": inprocess.
"runtimeTarget": .NETCoreApp,Version=v3.0.
Please refer to pages such as https://dotnet.microsoft.com/download/dotnet-core/2.2 to verify that ASP.NET Core version 13.0.19158.0 matches the runtime of the web app.

为什么IIS在我的服务器上报错?

注意:从Visual Studio 2019工作正常。


你能运行一个报告来揭示更多关于你的IIS设置的信息吗?https://docs.jexusmanager.com/tutorials/ancm-diagnostics.html - Lex Li
@LexLi 我刚通过 ASP.NET Core 诊断生成了一份报告,但是从报告中似乎无法找出是什么导致了这个错误。 - Westerlund.io
1
报告中未发现明显的问题。由于3.0文档目前较少,您可能需要自行调试代码,https://github.com/aspnet/AspNetCore/tree/release/3.0-preview6/src/Servers/IIS - Lex Li
你找到解决方案了吗?如果有,请分享一下。 - Diego Venâncio
17个回答

22

我将ASP.NET Core项目从.NET Core 3.0升级到3.1并安装了Microsoft .NET Core 3.1.0 - Windows Server Hosting后,遇到了同样的错误。

快速(但不好的)解决方法

将web.config处理程序从AspNetCoreModuleV2更改为AspNetCoreModule,然后它就可以正常工作了。

良好的解决方法

通过检查事件查看器找出根本原因。这个错误可能有多个原因,但在我的情况下,它没有找到与CodeAnalysis相关联的程序集。

无法找到应用程序依赖项。确保安装了应用程序所针对的Microsoft.NetCore.App和Microsoft.AspNetCore.App的版本。

找不到'aspnetcorev2_inprocess.dll'。异常消息:错误:应用程序依赖项清单(myproject.deps.json)中指定的一个程序集未找到:包: 'Microsoft.CodeAnalysis.CSharp.Workspaces',版本:'3.3.1' 路径: 'lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll'

尽管它们是相关的,但这些消息在不同的事件中。


8
FWIW:我遇到了类似的问题,但是在Azure应用服务中,我无法访问Windows事件查看器。鉴于此,我发布了一个快速摘要,介绍如何在Azure应用服务上排除这些问题。我想在这里留下一个参考,供任何处于类似情况的人使用。 - Jeremy Caney
2
相同的问题,改为AspNetCoreModule就可以工作。之后改为AspNetCoreModule V2仍然可以工作。真的很奇怪。 - andrewwang1TW
找到了原因,那么如何解决呢? - Abdulhakim Zeinu

22

我刚从NET5升级到NET6,认为在遇到这个错误之前已经安装了托管包。

输入图像描述

你需要实际点击托管包链接,而不是它旁边的x64 / x86。

那个文件应该是你需要的全部内容。我只安装了x64运行时。


5
不确定为什么这个还没有被点赞。这也是我所缺少的东西。我的主机没有安装 .NET 6 Hosting Bundle。搞定了。 - Jim Speaker
这是对我有效的正确解决方案。 - Habeeb

13

我有同样的问题。在我的情况下,问题出在dotnet publish命令中错误的RID。我进行了自包含部署,然后将其下载到应用程序服务。

因此,正确的命令应该是这样的:

dotnet publish -c Debug -r win-x86 --self-contained

11

如果这对其他人有所帮助,在从.net core 3.1迁移到.Net 5时:

  1. 此处安装SDK。
  2. 将解决方案中的所有项目和Web更新为<TargetFramework>net5.0</TargetFramework>
  3. 更新nuget包。

在本地,所有这些都运行良好。然而,当我将更改推送到Azure DevOps时,管道中运行的所有内容都正常,但Web应用程序却与OP一样出错。

我通过进入Azure门户解决了我的问题:

  1. 导航到应用服务刀片
  2. 设置下,转到配置
  3. 常规设置选项卡并将堆栈设置为.NET Core

enter image description here


1
谢谢,我已经成功将.NET 5升级到.NET 6。 - Frode Evensen
但是我现在只能看到'.NET'选项,而不是'.NET Core'。但已经选择为.NET了,可以吗? - jayaprakash R
@jayaprakashR,名称.net core n已被替换为.net n,我稍后会在此答案中添加更新。 - Christian Phillips

11

以下解决方案有效。

不重新安装iis的情况下解决此问题的方法:

  • 在web.config中将AspNetCoreModuleV2更改为AspNetCoreModule。 然后重新启动应用程序和池。 然后停止应用程序和池。 并替换回原来的设置。 运行应用程序和池。

这真的不太对 - 请参考 https://dev59.com/5lEG5IYBdhLWcg3wZsg4 - 有人能解释一下它是如何工作的吗(并且这个答案没有任何踩)? - Simon_Weaver

9

出现这个错误可能有很多原因。要找到确切的错误,请在web.config中将"stdoutLogEnabled"更改为true。这将生成日志文件,您可以在其中找到确切的问题。在我的情况下,我错过了一些dll文件。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\MyWebsite.Web.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: 20E974DC-FA0B-4957-8D1E-3466E348F82E-->

5

除了@Alexei的回答之外,我遇到了Azure App Service的这个错误。

请访问https://<your-app>.scm.azurewebsites.net/detectors?type=tools&name=eventviewer 或登录Azure门户并导航到“诊断和解决问题”以查看更好的错误描述。

enter image description here

在我的情况下,我遇到了以下错误:

无法找到'aspnetcorev2_inprocess.dll'。异常信息:将'D:\local\UserProfile.dotnet\tools'添加到PATH环境变量失败。将此目录添加到您的PATH以使用使用'dotnet tool install'安装的工具。

我对aspnetcorev2_inprocess.dll不熟悉,因此决定检查我的wwwroot文件夹以寻找线索:

https://<your-app>.scm.azurewebsites.net/DebugConsole/?shell=powershell

在我的情况下,文件位于D:\home\site\wwwroot。我看到了一些意料之外的DLL文件。原来我们的Azure DevOps Pipeline发布了我们的解决方案而不是Web项目,并且我们合并了一个新的Azure Functions项目到开发分支。修复发布后,一切正常。

以下链接有助于更多故障排除:

https://learn.microsoft.com/en-us/aspnet/core/test/troubleshoot-azure-iis?view=aspnetcore-3.1


2

在尝试在IIS上运行Dot net core 3.1 WebApp时,我遇到了相同的问题,并找到了这篇帖子。 安装以下内容帮助了我:

enter image description here

1

只是分享一下我的经验 - 也许对其他人有帮助。

我从2.*迁移到了3.1.5,但我没有删除两个旧的nuget包。

当我把它们去掉后,重新部署,就可以正常工作了。

(更准确地说,我删除了其中一个并更新了另一个 - Microsoft.EntityFrameworkCore.SqlServer版本从3.1.4升级到了3.1.5)


0

当我从我们的开发服务器部署到我们的分段服务器时,我遇到了相同的错误消息。通过添加Nuget包Microsoft.NetCore.App(版本2.2.8),我解决了这个问题。有时候答案就在错误信息中。


2
鉴于此线程特别涉及.NET Core 3.0,并且没有针对.NET Core 3.0的Microsoft.NetCore.App(或Microsoft.AspNetCore.App)NuGet元包,因此这并不能回答这个问题 - 尽管对于寻找.NET Core 2.x上的解决方案的用户可能很有用。 - Jeremy Caney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接