找不到“aspnetcorev2_inprocess.dll”。异常信息

Sco*_*lie 7 .net asp.net iis .net-core asp.net-core

我正在尝试发布一个在 IIS 下运行的 asp.net core v3 应用程序。我创建了一个虚拟目录,转换为应用程序。它有自己的 IIS 应用程序池,使用 CLR 设置:无托管代码、32 位:假和管道:集成。将应用程序发布到目录中,按预期创建默认的 web.config 和所需的 json 文件。网页配置:

<?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=".\PatientPlace3.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>
Run Code Online (Sandbox Code Playgroud)

如果我转到我网站的物理目录并手动运行“dotnet .\myapp.dll”,我可以在端口 5001 运行它没问题。我的客户端应用程序和 api 调用一切正常。当我尝试转到 IIS 下的 URL 时,出现 503 错误,并且在事件查看器中:

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

然后

找不到“aspnetcorev2_inprocess.dll”。异常消息:无法执行,因为找不到指定的命令或文件。可能的原因包括: * 您拼错了内置的 dotnet 命令。* 您打算执行 .NET Core 程序,但 dotnet-.\PatientPlace3.dll 不存在。* 您打算运行一个全局工具,但在 PATH 中找不到具有此名称的 dotnet 前缀的可执行文件。

另一个线索是,当我第一次访问 url 时,IIS 为 DefaultAppPool 启动了一个 w3wp 进程,而不是我自定义的 CORE 进程。我在所有 Program FIles\dotnet\shared[frameworkname][version] 目录(2.1.8 到 3.0.0)中都有 aspnetcorev2_inprocess.dll,并安装了模块。我试过将该 dll 复制到我的应用程序目录中,并完全限定 dotnet 参数。

总是同样的错误。

Ale*_*xei 10

导致相同错误的愚蠢原因:在 web.config 文件中指定不正确的启动程序集 (dll):

<aspNetCore processPath="dotnet" arguments=".\not_to_be_found.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
Run Code Online (Sandbox Code Playgroud)

如果发布时未刷新 web.config 并且程序集名称已更改,则可能会发生这种情况。

  • 不知道我的同事是怎么做到的,但他们做到了。始终首先尝试最快的潜在修复方法,即使它们看起来不太可能是问题所在。 (2认同)
  • 就我而言,这就是问题所在。我已复制旧的 web.config 并将其放置在新的项目托管位置。因此,dll 名称发生了更改。谢谢阿列克谢。 (2认同)

Sco*_*lie 5

重新创建我的 AppPool 解决了这个问题。它与非工作 AppPool 相同,因此它必须是创建顺序问题。第一个 AppPool 安装在 v3 版本的 aspnet 核心模块之前,或者类似的东西。谢谢莱克斯。

  • 除了将 processPath 从“dotnet”更改为“C:\Program Files\dotnet\dotnet”之外,在尝试了许多建议之后,这最终为我进行了排序。我使用的旧应用程序池设置为启用 32 位应用程序,再次禁用它有助于修复它。 (3认同)