我正试图发布一个ASP.NET Core v3应用程序以在IIS下运行。我创建了一个虚拟目录,转换为应用程序。它具有使用CLR设置的自己的IIS应用程序池:无托管代码,32位:False和管道:集成。将应用程序发布到目录中,按预期创建默认的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上运行它。我的client-app和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 \\目录(2.1.8至3.0.0)中都有aspnetcorev2_inprocess.dll,并安装了模块。我尝试将那个dll复制到我的应用程序目录中,并完全限定dotnet参数。 总是相同的错误。
谢谢!
答案 0 :(得分:0)
重新创建我的AppPool解决了该问题。它与无法工作的AppPool相同,因此必须是创建问题的顺序。第一个AppPool是在v3版本的aspnet核心模块或类似版本之前安装的。谢谢Lex。
答案 1 :(得分: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容器。
答案 2 :(得分:0)
导致相同错误的错误原因:在web.config文件中指定了错误的启动程序集(dll):
<aspNetCore processPath="dotnet" arguments=".\not_to_be_found.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
如果发布时未刷新web.config并且程序集名称已更改,则可能会发生这种情况。