关于c#:尽管已安装AspNetCoreModule,但在IIS中运行ASP.NET Core应用程序时仍然出现错误0x8007000d

Error 0x8007000d when running ASP.NET Core app in IIS despite AspNetCoreModule being installed

我有一个在IIS Express中运行良好的ASP.NET Core应用程序。同样,如果我通过dotnet run从命令行启动该应用程序,则所有工作都会顺利进行:

1
2
3
4
5
6
7
C:\Code\Sandbox\IisTestApp\IisTestApp>dotnet run
Using launch settings from C:\Code\Sandbox\IisTestApp\IisTestApp\Properties\launchSettings.json...
Hosting environment: Production
Content root path: C:\Code\Sandbox\IisTestApp\IisTestApp
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.

如果我尝试定位本地IIS,则会出现以下错误:

Unable to start process C:\Program Files\dotnet\dotnet.exe. The web server request failed with status code 500, Internal Server Error. The full response has been written to C:\Users{my user name}\AppData\Local\Temp\HttpFailure_08-05-50.html.

HTML文件包含以下信息:

Screenshot of 500.19 error

HTTP Error 500.19 - Internal Server Error

The requested page cannot be accessed because the related configuration data for the page is invalid.

Detailed Error Information:

Module IIS Web Core
Notification BeginRequest
Handler Not yet determined
Error Code 0x8007000d
Config Error
Config File \?\C:\Code\Sandbox\IisTestApp\IisTestApp\web.config
Requested URL http://localhost:80/IisTestApp
Physical Path C:\Code\Sandbox\IisTestApp\IisTestApp
Logon Method Not yet determined
Logon User Not yet determined

注意:如果从该消息中看不出来,这是对我的问题的最小复制,不是实际的应用

我在网上看到的大多数内容都显示错误代码0x8007000d表示我没有.NET Core Windows Server托管组件(AspNetCoreModule),但是我绝对已经安装了该组件:

screenshot of add remove programs with hosting component installed

我还可以在IIS的"模块"主页面中看到它,并验证它指向的文件实际存在:

Screenshot of modules list in IIS

奇怪的是,如果我尝试转到该特定站点的"模块"页面,则会收到与网页相同的错误消息:

There was an error while performing this operation.

Details:

Filename: \?\C:\Code\Sandbox\IisTestApp\IisTestApp\web.config
Error:

Screenshot of site modules error

此托管模块版本(2.1.8)通常与我安装的版本匹配:

1
2
3
4
5
6
7
8
9
10
11
C:\Users\{my user name}>dotnet --list-sdks
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.504 [C:\Program Files\dotnet\sdk]

C:\Users\{my user name}>dotnet --list-runtimes
Microsoft.AspNetCore.All 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

我的测试应用程序的目标是:

1
2
3
4
5
6
7
8
9
10
11
12
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
  </ItemGroup>

</Project>

尽管如此,我认为问题确实与IIS和托管组件有关!这是使用项目模板生成的(非常默认)web.config:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
       
      </handlers>
     
        <environmentVariables />
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

注意:如果我在processPath中硬编码完整路径,或使用.\相对路径,我仍然会收到相同的错误消息

如果删除节点,则会收到另一个错误:

HTTP Error 502.3 - Bad Gateway

There was a connection error while trying to route the request.

Detailed Error Information:

Module AspNetCoreModule
Notification ExecuteRequestHandler
Handler aspNetCore
Error Code 0x80070490
Requested URL http://localhost:80/IisTestApp
Physical Path C:\Code\Sandbox\IisTestApp\IisTestApp
Logon Method Anonymous
Logon User Anonymous

关键是AspNetCoreModule这次抛出错误,因此正在加载它并运行一些代码。

发布到一个单独的文件夹并在IIS中手动设置站点(而不是依靠默认的Visual Studio创建指向" bin"文件夹的IIS网站的行为)会产生相同的错误消息,尽管我得到的消息略有不同<生成的web.config文件中的x6>节点:

1
2
  <environmentVariables />
</aspNetCore>

是什么导致IIS无法运行此应用程序?

我尝试重新安装.NET Core(SDK,运行时和托管组件),但没有帮助。

我还注意到有几篇文章提到安装IIS的URL重写模块可以纠正此错误(特别是:HTTP错误500.19-IIS 7.5错误0x8007000d)。我的web.config没有提到该模块,但是我尝试安装它,以防AspNetCoreModule在后台使用它。这对我的情况没有帮助。


排除了我(以及许多有用的评论者,尤其是Daboul)可以想到的所有特定于应用程序的内容,并查看了可见的IIS设置之后,我求助于整个IIS的主要配置文件:applicationHost.config

根据ApplicationHost.config的简介,此文件位于%windir%\system32\inetsrv\config中。由于实际应用程序在我办公室的另一台计算机上工作,因此我使用diff程序对它们进行了比较,发现我的配置文件中缺少以下节点:

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <configSections>
        <!-- ...lots of other stuff... -->
        <sectionGroup name="system.webServer">
            <!-- ...lots of other stuff... -->

            <!--This"section" node for aspNetCore is the one that was missing-->
            <section name="aspNetCore" overrideModeDefault="Allow" />

添加该节点可以解决该错误。

奇怪的是,文件中后来多次引用了AspNetCoreModule本身。由于之前我没有手动编辑过此文件,因此在首次安装AspNetCoreModule时,这似乎是某种安装错误。


我尝试使用以上建议,但没有用。因此,我以管理员模式重新安装了Asp Net Core运行时托管,并且我的ApplicationHost.Config得到了纠正。