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

21

我正在尝试将一个asp.net core v3应用程序发布到IIS中运行。我创建了一个虚拟目录,并将其转换为应用程序。它有自己的IIS应用程序池,该池已设置为CLR:无托管代码、32位:False和Pipeline:集成。将应用程序发布到目录中,会创建默认的web.config文件和所需的json文件,如预期所示。Web.config:

<?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错误,并在事件查看器中看到以下信息:
Unable to locate application dependencies. Ensure that the versions of Microsoft.NetCore.App and Microsoft.AspNetCore.App targeted by the application are installed.
然后出现以下信息:
Could not find 'aspnetcorev2_inprocess.dll'. Exception message: Could not execute because the specified command or file was not found. Possible reasons for this include:
* You misspelled a built-in dotnet command. * You intended to execute a .NET Core program, but dotnet-.\PatientPlace3.dll does not exist. * You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.
另一个线索是,第一次访问该URL时,IIS会为DefaultAppPool启动w3wp进程,而不是我的自定义CORE进程。我在所有Program Files\dotnet\shared[frameworkname][version]目录(2.1.8到3.0.0)中都有aspnetcorev2_inprocess.dll,并且已安装模块。我已尝试将该dll复制到我的应用程序目录中,并完全限定dotnet参数。
始终出现相同的错误。

进程监视器可能会告诉您更多关于文件访问部分的信息。 - Lex Li
谢谢Lex。我尝试使用进程监视器,但在w3wp.exe进程下找不到dotnet.exe。我还尝试使用部署模式:自包含发布。该选项会将大量dll文件放入我的站点物理文件夹中,甚至包括aspnetcorev2_inprocess.dll。但它似乎仍然找不到它。 - Scott Wylie
重新创建我的应用程序池在IIS中,不知何故让我解决了这个问题。 - Scott Wylie
然后您应该发布自己的答案并接受它。 - Lex Li
5个回答

10
由于在 web.config 文件中指定了不正确的启动程序集(dll),导致了同样的错误,这是一个愚蠢的原因。
<aspNetCore processPath="dotnet" arguments=".\not_to_be_found.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />

这可能会发生在发布时没有刷新web.config文件且程序集名称已更改的情况下。

2
不确定我的同事是如何做到的,但他们确实做到了。始终首先尝试最快速的潜在解决方案,即使它们似乎不太可能是问题的原因。 - user169771
2
在我的情况下,这就是问题所在。我复制了旧的web.config并放置在新项目的托管位置。因此有dll名称更改。谢谢Alexei。 - Siva Makani

10
重新创建我的应用程序池解决了这个问题。它与不起作用的应用程序池完全相同,所以必须是创建顺序的问题。第一个应用程序池是在安装 v3 版本的 aspnet core 模块之前安装的,或者类似于此的情况。感谢 Lex。

3
在尝试了许多建议并将 processPath 从“dotnet”更改为“C:\Program Files\dotnet\dotnet”后,这最终解决了我的问题。我使用的旧应用程序池被设置为启用32位应用程序,再次禁用它有助于修复它。 - Simon Storr
1
我的应用程序被分配到了另一个应用程序池,不知道怎么回事。但是将其改回正确的应用程序池就解决了问题。 - Mark Smith

1
我遇到了这个错误。我查看了事件日志中的错误信息。它说:
“找不到 'aspnetcorev2_inprocess.dll'。异常消息:无法找到任何兼容的框架版本。未找到框架'Microsoft.AspNetCore.App',版本为'5.0.0'。以下框架已找到:2.1.19。”
因此,我从网站下载并安装了ASP.NET Core Runtime的5.0版本。

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

“为了确保它被修复,还执行了命令……然后它开始工作了。”

0

我尝试了所有的方法,包括运行.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容器。


0

我的事件查看器显示了 "找不到 'aspnetcorev2_inprocess.dll'."。

我正在开发一个以 .NET5 为目标框架的 Asp.Net Core 应用程序(MVC)。 在我的情况下,问题是我没有包含运行库(我的意思是文件夹 /runtimes/win、runtimes/win-x64 等)。 我还需要进入 Internet Information Services (IIS) 中我的网站并授予 IIS_USRS 用户权限。


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