【问题标题】:Could not find 'aspnetcorev2_inprocess.dll'. Exception message找不到“aspnetcorev2_inprocess.dll”。异常消息
【发布时间】:2020-03-12 01:33:52
【问题描述】:

我正在尝试发布一个在 IIS 下运行的 asp.net core v3 应用程序。我创建了一个虚拟目录,转换为应用程序。它有自己的 IIS 应用程序池,使用 CLR 设置:无托管代码、32 位:False 和管道:集成。将应用程序发布到目录,按预期创建默认 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>

如果我去我网站的物理目录并手动运行“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 参数。

总是同样的错误。

【问题讨论】:

  • 进程监视器可能会告诉您有关文件访问部分的更多信息。
  • 谢谢莱克斯。试过进程监视器,但是w3wp.exe进程下没有dotnet.exe。我还尝试使用部署模式发布:自包含。该选项会在我网站的物理文件夹中抛出大量 dll,甚至包括 aspnetcorev2_inprocess.dll。还是找不到。
  • 在 IIS 中重新创建我的应用程序池似乎已经让我克服了这个问题。
  • 那么你应该发布你自己的答案并接受它。

标签: asp.net .net asp.net-core iis .net-core


【解决方案1】:

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

【讨论】:

  • 除了将 processPath 从“dotnet”更改为“C:\我使用的旧应用程序池设置为启用 32 位应用程序,再次禁用它有助于修复它。
【解决方案2】:

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

<aspNetCore processPath="dotnet" arguments=".\not_to_be_found.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />

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

【讨论】:

  • 不知道我的同事是怎么做到的,但他们做到了。始终首先尝试最快的潜在修复,即使它们似乎不太可能成为问题。
【解决方案3】:

我遇到了这个错误。我查看了事件日志错误。 它说

找不到“aspnetcorev2_inprocess.dll”。异常消息:它是 找不到任何兼容的框架版本 框架 未找到“Microsoft.AspNetCore.App”版本“5.0.0”。 - 这 找到以下框架:2.1.19

所以我从

下载并安装了 ASP.NET Core Runtime 版本 5

https://versionsof.net/core/5.0/5.0.5/

还做了一个iisreset 只是为了确保它得到修复...... 它开始工作了。

【讨论】:

    【解决方案4】:

    我什么都试过了。包括运行 .EXE 而不是 dotnet + 参数(具有 dll)。 IIS 不断抱怨无效的 web.config。 当切换到 64 位时,它会说: “在模块 DLL C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\3.1.8\aspnetcorev2_inprocess.dll 中找不到 RegisterModule 入口点失败。”

    最后我决定放弃 IIS 的想法,转而使用 docker 容器。

    【讨论】:

      猜你喜欢
      • 2017-03-22
      • 2021-03-28
      • 2021-03-10
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多